gpt4 book ai didi

C 双指针的数组表示法等价

转载 作者:行者123 更新时间:2023-11-30 16:55:47 25 4
gpt4 key购买 nike

如果我有以下双指针并以数组形式使用它,它相当于上述哪种指针形式?

char** argv = malloc(2*sizeof(char*));

//argv[0] == (argv + 0), *(argv + 0), or (*argv + 0)?

//Same way, what would argv[0][0] be equivalent to in terms of *(*(argv +i)+j), etc.?

最佳答案

//argv[0] == (argv + 0), *(argv + 0), or (*argv + 0)?

这里都是*(argv + 0)(*argv + 0)都相当于 argv[0] 。通过打印输出可以很容易地知道这一点。你可以这样做:

char** argv = malloc(2*sizeof(char*));

for(int i = 0; i < 2; i++){
argv[i] = malloc(1);
}

//printing the values:
printf("%p == %p\n", argv[0], argv + 0);
printf("%p == %p\n", argv[0], *(argv + 0));
printf("%p == %p\n", argv[0], *argv + 0);

输出:

0x8e84018 == 0x8e84008 //not equal
0x8e84018 == 0x8e84018 //same
0x8e84018 == 0x8e84018 //same

请参阅此处查看完整示例:https://ideone.com/DDXuI9

对于 (argv + 0) 来说,情况并非如此。因为(argv + 0)指向char** argv的地址本身而 argv[0]指向第一个元素的地址(类型为 char* )

关于C 双指针的数组表示法等价,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40196206/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com