请教一个有关C语言指针问题。

2025-05-17 17:33:40
推荐回答(5个)
回答(1):

首先说一下,你这两个方式都很危险
这两个指针,都是野指针,没有指向安全的位置(因为这里是随机的)。
这个在初学指针的时候老师和课本应该说的很清楚,是着重指出的

第一个是吧a的值,也就是10赋值给b所指向的地址空间
所以打印出&a和b是不同的值
如果用b=&a,这样是把a的地址赋值给b指针

第二个,其实就是指针的理解问题
带*星号,是表示指针指向的内容,不带*星号是指地址

回答(2):

指针变量b没有初始化,b不指向哪块内存地址,也就不能用*b = a;来修改b指向内存里的值了
可以这样指定,
#define ss (*(volatile unsigned int *)10)
以上定义的是内存地址,即ss代表内存10这个地址
例如语句:
ss=0x55;//意思是向10的地址空间存入0x55,直接操作指定的内存空间的内容,但是这样做是不安全的,可能10这个地址是系统正在使用!

回答(3):

*b = a 这个是吧a的值赋给指针b,如果要得到a的内存地址试试下面的方法:
printf("%x", &(*b));//不知道c语言支持不支持
*b = &a;//直接把a的地址赋值给指针b,然后printf("%x", b);应该就可以了

回答(4):

你要得到a的地址的话是不能这样的,正确的方法应该是
int *b;
int a=10;
b=&a;
这样就对了,&的是用来取变量地址的运算符。
由于b没赋初值,所以不能直接给b的那块空间放一个a这种int型变量的。

回答(5):

错的,指针存放的是地址,要这样赋值:
b=&a;
然后得到a内存地址:
printf("%x",b);

因为数组名就代表了数组存储的开始地址,如char *p=arr,那么P就指向数组arr的起始位置,add = (int *)array;声明了这句话后,你的数组就变成了一个指针数组,数组中每个元素都是int *类型, *add = array[i]时,由于 array[i]的类型是int *类型,那么传递给*add 传递的就是array[i]的地址了。