我想知道以这种方式设置 C 指针的最大区别是什么:
int int_var = 5;
int *int_ptr = &int_var;
这样:
int int_var = 5;
int *int_ptr = int_var;
因为在这两种情况下,结果*int_ptr
都是 5,不是吗?
不,仅在第一种情况下。当您尝试尊重指针时,第二种情况将导致未定义的行为。使用第一种情况。
一些解释:
int int_var = 5;
int *int_ptr = &int_var; // here int_ptr will hold the address of var
然而
int int_var = 5;
int *int_ptr = int_var; // here int_ptr will hold the address 5.
不。在第一种情况下 5,在第二种情况下未定义,地址为 5 的内存的内容。??
不,int_ptr
是一个指针,所以你必须在定义它时为其分配一个地址
第一个是正确的
int int_var = 5;
int *int_ptr = &int_var;
另一个是错的
另一个你正在5
为指针int_ptr
(地址)分配一个 int 值,所以就像你5
为指针分配地址一样int_ptr
在 C 中,pointers
指向地址本身。address-of&
运算符是变量的地址所在的位置。
所以在:
int int_var = 5;
int *int_ptr = &int_var;
* int_ptr将被正确使用,因为它指向ADDRESS
int_var 的值为 5
然而在:
int int_var = 5;
int *int_ptr = int_var;
* int_ptr指向的地址是 5,而不是值 5 所在的地址,它是一些随机数。
另外关于数组:
char *y;
char x[100];
y = x;
这是可以做到的,因为数组实际上是一个地址。