问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言 int a,*p;*p=a;这个语句对吗?

发布网友 发布时间:2023-11-19 12:51

我来回答

4个回答

热心网友 时间:2024-10-06 17:09

楼主 一定要 区分 声明、定义、初始化 三者之间的区别哦
int a, *p;
这个叫声明,表示a是一个int类型,p是一个指向int类型的指针
还没有定义哦
*p=a,这个叫赋值语句,但是右边的 a只是一个声明,而没有定义,因此是没有用的,这个用法是错误的
TC支持,那是因为 编译器对 标准C规则进行了扩展,但是换了编译器未必就正确哦
所以好的编程习惯就是一定 按照 标准C规则来

声明:只是一个声明,没有分配内存
定义:这时候,才会分配内存,变量才有意义
初始化:在分配内存时候,给变量一个值
赋值:对一个已经分配内存的变量可以用=赋值(换一个值)

楼主补充了问题,我可以很负责的告诉你,
int a = 3, *p;
*p = a //error
这个是错误的,原因就是:
p是一个为初始化的一个 随机指针,对一个没有初始化的指针进行*运算,这个是取值运算,这个都是错误的,根本就不能对这样的指针做任何操作,严重的有可能p指向了操作系统的一快内存,对他进行操作,系统都有可能 挂掉的

一般的,这样用
int a= 3,*p;
p=&a; //a是已经分配了内存的一个int变量,对它进行取地址&运算,在给指针p进行初始化,

小的地方就能够看出一个人的基本功了,楼主要努力哦
送给楼主一句话了:
二进制的世界,才是程序真正的世界
努力做个 二进制的程序员吧,呵呵,不要太依赖于 编译器哦

记者给分哦

热心网友 时间:2024-10-06 17:09

int a,*p;*p=a;
这个处理,严格讲不算错,但是危险。

*p这个指针变量被声明后,
在进行"*p=a;"处理前,没有进行初始化,也没有对p进行任何赋值处理,
也就是说p没有指向任何有效的地址。

所以此时p指向的就是所谓的野地址,
这个地址有可能是一个空闲的地址(没有被使用),
也有可能是当前正在被系统或者其他程序使用的地址空间,
所以直接进行"*p=a;"处理的话有可能有两个结果:
1. 如果当前p指向一个空闲的地址,可以正常赋值
2. 如果当前p指向一个正在被系统或者其他程序使用的地址空间,那么直接赋值很有可能造成异常发生

====================================================
问题补充:那么假如int a=5,*p;*p=a;
是不是正确
====================================================
这也是有问题的,
注意一下,我上面说的,是指p没有指向任何有效的地址,不是说a没有初始化
这么改才是对的:
int a=8,b=5,*p=&b;//将p指向b的地址,这样p就指向有效地址了
*p=a;//此时的赋值,就是对于b的地址空间赋值,这样b的值就被赋值为a的值了

热心网友 时间:2024-10-06 17:10

int a, *p;

这时候p里面就有个值了,并不是说给它赋值之前他是"空"的。

printf("%d\n", *p);可以查看

但是这个值是一个随机的值,很可能就是系统保护的内存地址,对它进行读写可能造成程序或者系统异常退出。

p=&a;

这个时候p的值就是a的地址,对*P操作,就是操作a

另外,注意区分下面的2种情况:
(1)int a, *p=a;
(2)int a, *p;*p=a;

虽然都是*p=a;但他们是不同的:
int a,*p=a; 等价于 int a,*p;p=a;

同时要注意区分:
(1)指针变量的地址
(2)指针变量指向的地址

指针变量的地址:凡是变量,不管是基本类型,指针类型,结构体,共用体,只要是变量,你定义了它,他就存在栈中的某个位置

指针变量指向的地址:一般我们说给指针分配空间,并不是给指针变量本身分配空间,应该理解为:我们分配了一段空间,然后将它的首地址赋值给指针,也就是让指针指向分配出来的空间。

热心网友 时间:2024-10-06 17:10

"我在TC上试过了,int a,*p;*p=a;没有错误" 这并不能证明这个语句没有错误。因为你的指针变量p是一个野指针,他指向的内存地址是随机不确定的,然后当你;*p=a的时候,就把a的值写进了地址不确定的内存中去。

你需要建立的一种概念是,指针的正确使用是靠程序员的编程素质来保证的。像你说的这种错误,编译器是检查不出错误的,再说了,你向一个地址里面写数据能有什么错误呢,这正是使用指针的便利之处啊。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
如何将一个文件排在文件夹的第一个? 试管婴儿胚胎分级 试管婴儿胚胎分级8优代表什么 成人高考是成绩出来之后再填志愿吗 成考有必要报第二志愿吗 成人高考被第一志愿录取就不能选择第二志愿吗,分数什么学校都能进,老... 成教可以填报二批志愿吗? 高压电线是什么钢丝 地下水资源会枯竭吗 济南受污染的原因 下载不支持的手机QQ会出现什么情况? c语言数组a[n][m]中,int *p=a,p是a[0]的地址,a[0]是a[0][0]地址对吗 我不小心将linux 上的oracle 用户的变量环境给修改... 红米为什么只要一听歌然后打开其他软件就会自己停了?怎么解决? int a[3][2];int *p = a[0]; 是什么意思? 请问有地大北京的学长学姐么?我现在是高中生,喜欢古生物,想去... 请教,颈椎病地临床表现是哪些?3 我的被别人盗用了,怎么办呀! 密码忘了怎么找回? 304不锈钢大门多少钱一平方4 盐城五星客运站到阜宁最早的汽车是几点12 盐城五星客运站到嘉兴的车早上几点啊 蒸字在字典的那一页1 建湖至盐城五星车站早上有几班?大概什么时间发车? TB是什么意思?359 我想去做夜场,可以吗, 朋友们不太支持, 我也知道夜场口碑不...1 生化危机4PC上的 关于村庄那个Bug就是有隐藏武器那个地方... 未走人行横道被车撞 行人是否承担责任?77 什么是颈椎病,颈椎病是什么状态2 如果得了颈椎病,都有什么表现?什么样才是颈椎病,求指教 ...电源为大水牛PP345EAA电源可不可以带的起影驰GT720 1GB 1999年美国国会通过了《金融服务现代化法案》,其核心内容是()。 各位大侠,老板拿了10万投资一家子公司,要记什么会计科目?长期股权投资... 团员意识教育活动6 你的手机号在最近一个月内绑定4个达到限制怎么才能接触? 山西太原富士康的员工为什么来得快、也走得快,每天都有那么多的招聘... 对于某一件事情的信念单词应该采用哪个?Belief; Con...5 我的社保卡可以到银行取现金吗743 我的社保卡可以到银行取现金吗?1137 怎样用同一个手机号申请两个? ...开机就弹出一个Winlogon 通用控制对话:Winlogon.exe-应用程序错误... lol石头人大招可以隔墙撞吗? 内蒙古赤峰市有没有个网络警察3 糊里糊涂和别人订了婚,心中各种难过.后悔自己冲动的做法,我活该!我真... 不锈钢门304#厚1.0多少钱一平方115 304不锈钢入户门多少钱一平方,单开门,包双边2 ...怎么头痛欲裂,还有胸闷痛,我以为是睡眠不足,但是我睡了7小时啊... 持续几天脑袋头痛欲裂,身体发冷,感觉不是感冒的症状,呼吸顺畅,没觉着哪 ... 被别人盗用了怎么办 一个手机怎么注册两个