我试图理解指针和数组之间的区别,所以我创建了一个简单的程序。我所做的就是将一个字符分配给指向一个字符的指针。所以据我所知,有两种方法可以做到这一点。第一个:使用解引用运算符第二个:使用方括号
有关更多详细信息,请让我提供代码
char **array2 = malloc(sizeof(char*));
*array2[0] = 'c';
以上似乎不起作用
我试过的第二个版本是这个
char **array2 = malloc(sizeof(char*));
**array2 = 'c';
首先,这些代码都不适合我。二、这两个版本有什么区别
在语法上,x[y]
和*(x + y)
完全一样。所以两段代码都在做同样的事情。问题是您试图取消引用无效指针。
初始化后,array2
指向单个类型对象的指针,该对象char *
可以作为array2[0]
或访问*array
。此指针对象未初始化。然后,您尝试取消引用这个未初始化的指针并为取消引用的对象分配一个值。试图取消引用无效指针会触发未定义的行为。
您可以通过为此指针分配内存来指向:
char **array2 = malloc(sizeof(char*));
array2[0] = malloc(sizeof(char));
*array2[0] = 'c';
这相当于:
char **array2 = malloc(sizeof(char*));
*array2 = malloc(sizeof(char));
**array2 = 'c';
或者你摆脱了额外的间接级别:
char *array2 = malloc(sizeof(char));
array2[0] = 'c';
*array2 = 'c';
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句