永发信息网

Linux C中 void *p; *((int *)p)=4; 与 int a=5;void *p=(void *)&a; 有木有区别?

答案:5  悬赏:30  手机版
解决时间 2021-04-05 18:55
Linux C中 void *p; *((int *)p)=4; 与 int a=5;void *p=(void *)&a; 有木有区别?
最佳答案
void *p;    *((int *)p)=4;与    int a=5;    void *p=(void *)&a; 这两条语句是完全不同的。
    int a=5;
    void *p=(void *)&a; //这是一条合法语句,表示定义一个指针变量,并指向一个整型变量的地址。即:通过指针变量p,可以访问到变量a的数据。
    
    void *p; //定义一个指针变量,未指定数据类型(void表示任意类型),也没指定内存空间,是个野指针
    *((int *)p)=4; //这句语法是合规的,但是向野指针中写入数据,会引起core dump.
正确写法:
    int a=5;
    void *p=(void *)&a;
    *((int *)p)=4; //这样写,相当于实现a=4
全部回答
J2EE选手路过
没区别
没什么区别。主要是操作对像不同而已。
前者主要是对指针P的操作,而后者主要对变量a的操作。
具体的细节看他们的汇编代码就可以看出来的。
个人愚见。旨在抛砖引玉……
void *p; //定义p为通用指针型变量,p可以保存char型,int型,结构体等类型数据的地址,需要进行类型的强制转换
*((int *)p)=4; //这里的(int *)p,是将p强制转换为保存int型数据的地址变量,最前面这个*,是对已经转换为保存int型数据的地址变量取其内容,这句的作用是地址p所指向内容为4.
int a=5;
void *p=(void *)&a; //&a表示取a的地址,其前面的(void*)表示将a的地址强制转换为通用的地址类型,然后(void *)&a;这个地址赋值给通用的地址类型变量p.
前者是对*p进行赋值操作;后者是对p进行赋值操作,这个是最大的区别.追问这个我知道,,,我要知道的是这两个指针 到底有啥关系以及区别(可能没区别的)。。。。
我就怀疑有区别 但又不知道哪里。。所以想请教个位大侠。追答定义都是void *p;所以p的本质是一个void型指针,这是不存在区别的;
前者指针变量p所指向的值所直接赋值的,这个其实是非法的,我刚在Ubuntu下试了一下这下面的代码,虽然可以编译通过,但是运行会出现:Segmentation fault:
#include
int main(void)
{
void *p=NULL;
*((int *)p)=4;
printf("%d\n",*((int *)p));
return 0;
}
后者指针变量p所指向的值是间接的,是将值赋给一个变量,然后将变量的地址赋给指针变量p,以后就可以直接对*p操作改变那个变量a的值.这是合法的.
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
给父亲生日祝福的话,女性朋友过生日写什么祝
powermaxeco翻译成中文
华容县岳阳欧美商行华容店这个地址怎么能查询
一本书厚1.26厘米.100本同样的书一共厚多少米
我和一个女生聊天问他认不认识一个人而她说认
新长安之新sc6406a 1.3排量的
能开增值税发票的是否必须有对公户
中国都有哪些快递公司,中国都有哪些快递公司
单选题从冰箱内取出的冰棍周围会弥漫着“白气
身体乳怎么用
怎样快速赚到钱
花香扑鼻是什么意思,日日行的下一句是什么?
王者荣耀韩信最厉害,有谁不服
车子检测到缺火状态没有不平路面数据什么意思
用手机导航一小时能用多少流量
推荐资讯
京馔烘焙吐司现在还火吗
叶县平顶山红煨元鱼怎么去啊,谁知道地址啊
如何用asp代码获取HTML控件select的选定值?
以面对生活不能做懦夫或者半途而废的人为主题
迈克在他四岁时来中国用英语怎么翻译
阿拉蕾名言人生的路要,描述人生的诗句
四百九十万八千写作________,它的最高位是__
omybaby iloveyou 一首英文歌 一个女组合唱的
神奇宝贝第二部小智在哪集被绑过?给图或集数
男人听了最感动的一句话?
快手有没有看直播记录,我看了个直播,忘记关
为啥我家的加菲猫喜欢咬我鞋
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?