【发布时间】:2017-01-19 19:42:50
【问题描述】:
我有两个不同的代码示例。在第一个代码中可以取消引用:
void getValue(int *myPointer)
{
*myPointer = 10000;
return;
}
int main()
{
int get_the_value = 2;
getValue(&get_the_value);
printf("The value of get_the_value = %d\n", get_the_value);
return 0;
}
但在下面的代码中,无法在 func() 中取消引用 *B。 我从互联网上获得了以下代码,他们这样说:
"B 是一个指向 int 的指针,因此 B[0] 是一个 int,你不能取消引用一个 int。 "
但是第一个代码中的 *myPointer 也不是 int 类型吗?
所以我的问题是:为什么取消引用在第一个代码中起作用,而在第二个代码中不起作用?
#include <stdio.h>
int func(int *B){
*B[0] = 5;
}
int main(void){
int B[3] = {1, 2, 3};
printf("b[0] = %d\n\n", B[0]);
func(&B);
printf("b[0] = %d\n\n", B[0]);
return 0;
}
【问题讨论】:
-
因为
B[0]的结果不是int*,而是int。 -
因为
*x和*x[0]不一样。 -
这是因为在第一种情况下 myPointer 是指向 int 的指针,即存储整数值的地址,但在第二种情况下,变量 B[0] 是 int 类型,即存储整数值。
-
*B[0] = 5是一种双重取消引用。使用B[0] = 5。 -
DeiDei B[0]的结果是什么意思?
标签: c pointers dereference