1

我想知道以这种方式设置 C 指针的最大区别是什么:

int int_var = 5;
int *int_ptr = &int_var;

这样:

int int_var = 5;
int *int_ptr = int_var;

因为在这两种情况下,结果*int_ptr都是 5,不是吗?

4

4 回答 4

2

不,仅在第一种情况下。当您尝试尊重指针时,第二种情况将导致未定义的行为。使用第一种情况。

一些解释:

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.
于 2013-04-09T19:13:00.490 回答
0

不。在第一种情况下 5,在第二种情况下未定义,地址为 5 的内存的内容。??

于 2013-04-09T19:14:37.840 回答
0

不,int_ptr是一个指针,所以你必须在定义它时为其分配一个地址

第一个是正确的

int int_var = 5;
int *int_ptr = &int_var;

另一个是错的

另一个你正在5为指针int_ptr(地址)分配一个 int 值,所以就像你5为指针分配地址一样int_ptr

于 2013-04-09T19:15:13.880 回答
0

在 C 中,pointers指向地址本身。address-of&运算符是变量的地址所在的位置。

所以在:

int int_var = 5;
int *int_ptr = &int_var;

* int_ptr将被正确使用,因为它指向ADDRESSint_var 的值为 5

然而在:

int int_var = 5;
int *int_ptr = int_var;

* int_ptr指向的地址是 5,而不是值 5 所在的地址,它是一些随机数。

另外关于数组:

char *y;
char x[100];
y = x;

这是可以做到的,因为数组实际上是一个地址。

了解更多信息。

于 2013-04-09T19:25:25.633 回答