设置指针与地址运算符之间的区别

时间:2013-04-09 19:11:37

标签: c pointers addressof

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

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

就这样:

int int_var = 5;
int *int_ptr = int_var;

因为在这两种情况下*int_ptr的结果都是5,没有?

4 个答案:

答案 0 :(得分: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.

答案 1 :(得分:0)

没有。在第一种情况5中,在第二种情况下是未定义的,是具有地址5的存储器的内容。??

答案 2 :(得分:0)

没有int_ptr是指针,因此您在定义时必须为其指定地址

第一个是正确的

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

另一个是错的

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

答案 3 :(得分:0)

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

所以:

int int_var = 5;
int *int_ptr = &int_var;
正确使用

* int_ptr ,因为它指向int_var的ADDRESS,其值为5

然而在:

int int_var = 5;
int *int_ptr = int_var;

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

另外关于数组:

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

这可以完成,因为数组实际上是一个地址。

For more information.