Манипулирующие элементы в двумерном массиве - PullRequest
2 голосов
/ 11 июля 2011

Я пытаюсь манипулировать элементами в двумерном массиве

#include <stdio.h>

main()
{
    char arr[][30] = {"hello", "goodbye"};
    printf("%s\t%s\n",arr[0], arr[1]);
    arr[0] = arr[1];
    printf("%s\t%s\n",arr[0], arr[1]);
}

incompatible types when assigning to type ‘char[30]’ from type ‘char *’

Я новичок в C и пришел из OO, так что мои знания указателей все еще очень фундаментальны.

Я понимаю, что это можно сделать с помощью массива указателей, но хотелось бы знать, как выполнить эту операцию с двумерными массивами

Спасибо за любые разъяснения

Ответы [ 2 ]

5 голосов
/ 11 июля 2011

Вместо этого вам нужно char* arr[], поскольку вы не можете присвоить массив другому массиву.

Но почему?

Что бы это значило?Должно ли оно копировать элементы?Для этого используйте strncpy или memcpy.Или это должно как-то "перенаправить" предыдущий массив?Это не имеет смысла, потому что массив - это просто блок памяти ... что вы можете с ним сделать, кроме как изменить его содержимое?Немного!Вы можете, однако, иметь указатель на блок и изменять его так, чтобы он указывал куда-то еще.

Но не являются ли массивы и указатели одним и тем же?

Нет !! Зачем им тогда два разных имени?: P Массивы могут распадаться на указатели неявно (адрес их первых элементов), но они не одно и то же!Указатели - это просто адреса , тогда как массивы являются блоком данных.Они не имеют никакого отношения друг к другу, кроме неявного преобразования.:)

1 голос
/ 11 июля 2011

arr[0] сам по себе является массивом.C не поддерживает присвоение массивам.Если вы хотите скопировать содержимое массива arr[1] в массив arr[0], используйте memcpy :

memcpy(&arr[0][0], &arr[1][0], sizeof arr[0]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...