【发布时间】:2019-04-03 03:50:51
【问题描述】:
我想将指针数组的地址分配给指向指针数组的指针。这就是我在下面为函数的参数所做的。它没有正常工作,它取消引用了不正确的值。我将问题缩小到下面的代码。但我不明白这个问题。
#include <stdio.h>
void test( char * arg[]){
char * local[] = {"break", "the", "silence", NULL};
char * (*argptr)[];
char * (*localptr)[];
argptr = &arg;
localptr = &local;
printf("address of arg %p\n", &arg);
printf("address argptr is pointing to %p\n", argptr);
printf("address of local %p\n", &local);
printf("address localptr is pointing to %p\n", localptr);
printf("arg %p\n", arg);
printf("argptr is pointing to %p\n", *argptr);
printf("local %p\n", local);
printf("localptr is pointing to %p\n", *localptr);
}
int main()
{
char * somecmd[] = {"words", "like", "violence", NULL};
test(somecmd);
return 0;
}
以上代码的输出:
address of arg 0x7ffd0ab3c418
address argptr is pointing to 0x7ffd0ab3c418
address of local 0x7ffd0ab3c420
address localptr is pointing to 0x7ffd0ab3c420
arg 0x7ffd0ab3c450
argptr is pointing to 0x7ffd0ab3c418
local 0x7ffd0ab3c420
localptr is pointing to 0x7ffd0ab3c420
arg 的地址和 argptr 的值是一样的。对于 local 的地址和 localptr 的值也是如此。但是,arg 的值和 argptr dereferenced 的值是不同的。这正是我所期待的。我期望的更像是 local 的值和 localptr dereferenced 的值,它们是相同的。
为什么 arg 和 argptr dereferenced 有不同的值?
【问题讨论】:
-
warning: assignment from incompatible pointer type [-Wincompatible-pointer-types] argptr = &arg;
标签: c arrays pointers arguments