我有一个存储5个char *
指针的结构
struct x {
char *arr[5];
};
我使用malloc((为结构分配内存
struct x *str = malloc(sizeof(struct x));
然而,当我尝试用一个值(即只读字符串文字(初始化arr
时,它会给我一个错误
error: expected identifier before ‘(’ token
13 | (*str).(*(arr+0)) = "hello";
^
这是我的初始化
(*str).(*(arr+0)) = "hello";
我知道我可以像这个一样做
str->arr[0] = "hello"
但我想了解字符串数组是如何工作的,所以我使用了指针,首先取消了对str->
的引用,并将其更改为(*str)
。
此外,由于arr[0]
在初始化str->arr[0] = "hello"
中工作,并且我知道arr[0]
等效于*(arr+i)
,其中i
是阵列单元,所以我认为这在(*str).(*(arr+0)) = "hello";
中工作,但它不工作。
为什么这是事实,字符串数组是如何在幕后工作的?
结构具有数据成员arr.
struct x {
char *arr[5];
};
因此,您必须使用运算符.
或->
(例如(写入访问数据成员
*( (*str).arr + 0) = "hello";
这与相同
*(*str).arr = "hello";
或
*str->arr = "hello";
或
str->arr[0] = "hello";
这就是会员访问运营商的定义类似
postfix-expression . identifier
postfix-expression -> identifier
当您尝试使用不是标识符的表达式时。
使用您的方法访问数组的蚂蚁元素,您可以编写
*( (*str).arr + i) = "hello";
或
*( str->arr + i) = "hello";
这是一开始你需要得到像这样的阵列指示符
( *str ).arr
或
str->arr
然后可以对获得的数组使用指针算术。