【发布时间】:2018-08-10 11:25:50
【问题描述】:
我正在编写代码来了解在函数中将指针作为参数传递时会发生什么。
void ptrTest(int **arg_ptr);
int main() {
int some_var = 5;
int *ptr1;
ptr1 = &some_var;
printf("Address of some_var: %u\n\n", &some_var);
printf("Value stored in *ptr1 (references to some_var): %u\n", ptr1);
printf("Address of *ptr1 variable: %u\n\n", &ptr1);
ptrTest(ptr1);
}
void ptrTest(int **arg_ptr){
printf("Value stored in **arg_ptr (references to some_var): %u\n",arg_ptr);
}
结果如下:
Address of some_var: 3119323004
Value stored in *ptr1 (references to some_var): 3119323004
Address of *ptr1 variable: 3119322992
Value stored in **arg_ptr (references to some_var): 3119323004
我很惊讶 arg_ptr 采用了引用 some_var 地址的值。我期待 **arg_ptr 指向 *ptr 并存储 3119322992 的值(引用 *ptr 的地址)。
当我测试指向函数外部指针的指针时,它确实以这种精确的方式运行。为什么将指针作为参数的指针不同让我感到困惑。
你能解释一下这里发生了什么吗?
【问题讨论】:
-
我很惊讶编译器没有抱怨参数 (
int *) 与类型 (int **) 不匹配 -
@SaileshD 所说的 :) 符合标准的编译器必须在此处为您提供诊断消息。投票结束这是一个简单的错字。
-
您的输出不正确。您永远不会在代码中打印
"Value stored in"。请复制并粘贴您的代码和输出。不要提供从内存中重写的随机代码。 -
真实代码,但为了清楚起见更改了字符串 printf 并忘记更改代码。现在更新了。