操纵2D阵列中的元素

时间:2011-07-11 15:13:30

标签: c

我试图操纵2D数组中的元素

#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背景,因此我对指针的了解仍然非常基础。

我知道这可以使用指针数组完成,但想知道如何使用2D数组执行此操作

感谢您的任何澄清

2 个答案:

答案 0 :(得分:5)

您需要char* arr[],因为您无法将数组分配给另一个数组。

但是为什么你呢?

嗯,这意味着什么?它应该复制元素吗?请使用strncpymemcpy。或者它应该以某种方式“重定向”前一个数组?这没有意义,因为一个数组只是一个的内存......你可以用它来做什么,而不是修改它的内容?不多!但是,您可以在块中使用指针,并将其更改为指向其他位置。

但是数组和指针不一样吗?

不!! 为什么他们会有两个不同的名字呢? :P数组可以隐式地衰减到指针(它们的第一个元素的地址),但它们不是同样的东西!指针只是地址,而数组数据块。除了隐式转换之外,它们彼此没有关系。 :)

答案 1 :(得分:1)

arr[0]本身就是一个数组。 C不支持分配数组。如果您要将数组arr[1]的内容复制到数组arr[0]中,请使用memcpy

memcpy(&arr[0][0], &arr[1][0], sizeof arr[0]);