不, localarr
不一样 &localarr
因为类型&localarr
是char(*)[99]
你应该创建指向数组的指针,比如:
char(*ppl)[99] = &localarr;
ppl
对大小为 99 的字符数组的指针在哪里
localarr
为了可视化和 下面的区别&localarr
是我的图表:
+----+----+----+---+---+----+----+----+----+----+
| '1'| '2' |'3'|............... |98 | 99 | ...........
+----+----+----+---+---+----+----+----+----+---+----+
201 202 203 ............... 210 299
^ ^
| |
(localarr) (localarr + 1)
| |
|-----------------------------------------|--------
|201 | 299 // 299 -201 = 98
^ ^
| |
(&localarr) (&localarr + 1)
(注意:)
* localarr + 1
以 1 个字符大小递增,其中以数组大小 (&localarr + 1)
递增。99
看看这段代码及其输出:
int main()
{
char localarr[99] = {'A'};
printf("%p %p\n",localarr, &localarr);
printf("%p %p\n",(localarr + 1), (&localarr + 1));
printf("%c %p %c\n",*localarr, *&localarr, **&localarr);
return 0;
}
输出:(阅读评论)
~$ ./a.out
0x7fff41ad64b0 0x7fff41ad64b0 // same
0x7fff41ad64b1 0x7fff41ad6513 // difference is 98, 4b1 + 62 = 513
A 0x7fff41ad64b0 A
注意:localarr
和 &localarr
的值相同,0x7fff41ad64b0
但*localarr
和 *&localarr
的值不同:
*localarr
是第一个元素
*&localarr
是第一个元素的地址 **&localarr
是第一个元素
这意味着与第一个元素*localarr
相同**&localarr
localarr[0]
注意0x7fff41ad6513 - 0x7fff41ad64b1 = 0x62
和 0x62 = 98 十进制
什么编译器错误消息是:
error: cannot convert ‘char (*)[99]’ to ‘char**’
^ ^ type of ppl
type of &localarr
使用指向字符数组的指针阅读此问题