我严重误解了指针,因此希望有人可以澄清这一点。
int *x;
是一个指向int的指针。 x
指向指针本身,*x
指向存储在x的内存位置的值(或目标)。
如果我希望x指向一个int(值是10),为什么我不能int *x = 10;
呢?
我不太了解为什么当我们执行类似printf("%d", *x);
的操作时,它会打印出存储在x处的值,但是我们却不能执行int *x = 10;
答案 0 :(得分:4)
您的困惑与初始化和赋值之间的区别有关。这些是初始化的示例:
int a = 5; // valid; "a" is an int which is initialized with the value 5
int *b = &a; // valid; "b" is an int * which is initialized with the address of "a"
int *c = 10; // invalid; "c" is an int * which is initialized with the value 10
这些是作业:
a = 5; // valid; "a" is assigned the value 5
b = &a; // valid; "b" is assigned the address of "a"
*b = 10; // valid; "b" points to "a", and the value "b" points to is set to 10
请注意,*
的使用在两者之间有所不同。初始化时,*
表示给定的变量是一个指针,而赋值(或任何表达式)中的*
表示该指针已被取消引用。
答案 1 :(得分:2)
int * x-> x是整数的内存地址,键入(int *)。
如果您执行* x,它会显示内容,因为*是一个操作数,一个内存操作数显示的是该内存地址中存储的内容,而(int *)是一种数据类型,是指向内存中某物的指针,完全不同。
希望我很快解释了。良好的编码。
答案 2 :(得分:1)
int * x表示---- x是整数指针类型。
并且10是整数类型。
在您的情况下,您尝试将“整数”类型分配给“整数指针”类型,由于两种不同的类型,该类型无效。