C语言 理解指针



我有这个问题,我不明白这意味着什么。我在评论里问我的问题。

int x = 3; 
int *y = &x;     
int z = *y;
printf("%d", z); //why does this give me the value and not the adress? I thought this means z =*y -> *y =&x -> &x outputs the adress of x
int *u= (y+1);  //what does this mean? 
printf("%d", *u); //why does this give the output of 3? 

y是指向整型变量x的指针。

int x = 3; 
int *y = &x;     

解除对指针y的引用,可以直接访问指针指向的变量x并提取其值。

因此在这个声明中

int z = *y;

变量z被变量x的值初始化,通过使用指向x的指针y

相应的,这个语句

printf("%d", z);

输出初始化变量z的值3

在这个声明中

int *u= (y+1);

在初始化表达式中有一个带有指针算术的表达式。表达式y + 1的类型是int *,它位于指针y所指向的变量(对象)x之后的内存中。

解除对该语句中不指向有效对象的指针u的引用

printf("%d", *u);

调用未定义行为。

int z = *y;
printf("%d", z);

问:为什么给我的是值而不是地址?
:y指向x变量。因此取消对y指针的引用是5。*yy所指向的值,即x的值为3。C课本中有关指针的章节对此进行了解释。

int *u= (y+1);

问:这是什么意思?
:y指向x(如前所述)。y + 1指向内存中x之后的int,但这是垃圾,因为该地址没有任何有效的内容,它是一个无效的内存地址。

printf("%d", *u);

问:为什么输出是3?
:如上所述,u没有指向一个有效的地址,因此您在该地址读取的值是垃圾,它可以是任何东西。解引用指向无效内存的指针是未定义的行为(谷歌这个术语)。

指针存储地址。
星号*y去引用指针以获得指针指向的值。

#include <stdio.h>
int main ( void) {
int x = 3;
int *y = NULL;
y = &x; // store the address of x in the pointer
// y now points to x
printf ( "address of x:        %pn", (void *)&x);
printf ( "address y points to: %pn", (void *)y);
printf ( "address of y:        %pn", (void *)&y);
int z = 0;
z = *y; //*y de-references the pointer to get the value at the address
//stored in the pointer.
printf ( "value y points to:   %dn", *y);
printf ( "value of z:          %dn", z);
int *w = NULL;
w = y; // store the address y points to in the pointer w
// w and y now point to x
printf ( "address w points to: %pn", (void *)w);
printf ( "address of w:        %pn", (void *)&w);
printf ( "value w points to:   %dn", *w);
int array[6] = { 1, 2, 3, 4, 5, 6};
int element = 0;
w = array; // store the address of array in w
// w now points to array
printf ( "address of array:    %pn", (void *)array);
printf ( "address w points to: %pn", (void *)w);
element = *w;
printf ( "value of element:    %dn", element);
element = *(w + 3);
printf ( "value of element:    %dn", element);
element = w[5];
printf ( "value of element:    %dn", element);
return 0;
}

相关内容

  • 没有找到相关文章

最新更新