c-为什么我的字符串数组赋值不适用于指针



我有一个存储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

然后可以对获得的数组使用指针算术。

相关内容

  • 没有找到相关文章

最新更新