我试图操纵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数组执行此操作
感谢您的任何澄清
答案 0 :(得分:5)
您需要char* arr[]
,因为您无法将数组分配给另一个数组。
嗯,这意味着什么?它应该复制元素吗?请使用strncpy
或memcpy
。或者它应该以某种方式“重定向”前一个数组?这没有意义,因为一个数组只是一个块的内存......你可以用它来做什么,而不是修改它的内容?不多!但是,您可以在块中使用指针,并将其更改为指向其他位置。
不!! 为什么他们会有两个不同的名字呢? :P数组可以隐式地衰减到指针(它们的第一个元素的地址),但它们不是同样的东西!指针只是地址,而数组是数据块。除了隐式转换之外,它们彼此没有关系。 :)
答案 1 :(得分:1)
arr[0]
本身就是一个数组。 C不支持分配数组。如果您要将数组arr[1]
的内容复制到数组arr[0]
中,请使用memcpy:
memcpy(&arr[0][0], &arr[1][0], sizeof arr[0]);