有关c语言中指针的一些理解问题

2025-05-12 19:54:03
推荐回答(3个)
回答(1):

首先,你的基本理解都是正确的。指针本身也是一个变量。
那么就是你说的五个等式的含义了。
首先是*b = &a;
这个需要分情况的。如果是int* b = &a;那么就是表示b是指向a的指针。但如果没有前面的int。*b = &a;那么就是表示b指向a的地址。也就是说是指针的指针。
然后是b = &a;这个就是b的值是a的地址,也就是b是指向a的指针。
b = a;这个一般是非法的。他的含义是将b的值赋值为a的值。对于宽松一点的编译器这个可能可以通过,但是执行结果就是不可预知的了。因为地址也是一个整数,这么做确实从数据上是可以的。但是a的值是不可预见的,那么当做*b的时候,指向的值就不可知了。
*b = a;这个是表示将b指向的值赋值为a。
*(int*)100=25这个就类似于b = a的情况。首先它将100强制转换成一个int指针。也就是说将100当作地址。然后再对这个地址取值,并将这个值赋值为25。除非你很明确你在做什么,否则这种写法都是不应当的。

回答(2):

如果*b=&a,表示指针b存的是a的地址,*b=a表示指针b存的是a的值

回答(3):

你前面的理解都是对的。
1、从这个开始:int *b=&a,这个声明,这个是声明并且初始化语句,初始化就是赋值,这个声明是声明一个指针,那么赋值就是给指针赋值,所以这里的赋值就是将变量a的地址赋值给指针b;
2、b=&a是合法的;int *b=&a可以拆开来,即{int *b; b=&a;}
3、*(int*)100=25;(int*)表示将常量100强制转化成int指针类型;*(int*)100合起来的意思就是取地址为100的内存空间里面的数值;整个语句就是将内存地址为100的地方赋值为25.