以下指针初始化有什么区别?
char array_thing[10];
char *char_pointer;
以下初始化有什么区别?
1.) char_pointer = array_thing;
2.) char_pointer = &array_thing
第二次初始化是否有效?
答案 0 :(得分:5)
第二次初始化无效。你需要使用:
char_pointer = array_thing;
或
char_pointer = &array_thing[0];
&array_thing
是指向数组的指针(在本例中,类型为char (*)[10]
,您正在寻找指向数组第一个元素的指针。
答案 1 :(得分:1)
请参阅comp.lang.c常见问题,问题6.12:http://c-faq.com/aryptr/aryvsadr.html
答案 2 :(得分:0)
请注意,您发布的代码中根本没有初始化。也就是说,你应该记住,数组衰减为指针(指向数组中第一个元素的指针)。获取数组的地址肯定是有效的,但现在您有一个(*char)[10]
而不是char*
。
答案 3 :(得分:0)
在第一种情况下,您将char_pointer设置为array_thing的第一个元素(而不是它的地址)。使用指针算法将带您到其他元素,索引也将如此。例如
char_pointer[3] = 'c';
与
相同char_pointer + = 3; char_pointer ='c';
第二个例子......我不相信你这样做是有效的。