欢迎光临散文网 会员登陆 & 注册

【C语言】数组挖的坑,中招的举个爪!

2021-09-19 02:30 作者:秋名山西  | 我要投稿

从大学修过C语言基础这门课后,每每看到诸如变量、数组、结构体这些东西时,总觉得自己已经掌握了,没必要重点学习。知道今天看到QQ群有位老铁跑出这么个问题,如下图:

这个程序printf出来为啥是0000?

仔细瞅了瞅,发现这个问题貌似触及到了我的知识盲区。于是跑去查了下资料,这里说一下我的成果:

首先,要区分两个概念,那就是左值与右值。何谓左值, 赋值运算符左边的即为左值,何谓右值,赋值运算符右边的称为右值。可以表示为:左值 = 右值。左值呢一般为具体的某块内存,右值则是内存中存储的数据。

然后回到我们的问题中,在程序中,主函数将数组mac的首地址传给func函数,程序原作者希望调用func函数,完成将字符串"1234"赋值给数组mac的前四个元素的工作。为什么程序最终没能实现该目的呢?我认为有如下几个原因:

1、c语言规定,对数组的操作不能整体进行,必须单个元素操作。

2、数组的地址是由编译器编译时直接给定的,数组变量的变量名与此地址直接绑定,也就说数组mac的首地址是一个常量,它不能作为左值,即不能对数组的地址进行变更,强行变更将会导致变更失败。

所以这个程序中,强行将字符串"1234"的首地址赋值给mac的首地址(常量),就导致了最终运行结果的失败。

【C语言】数组挖的坑,中招的举个爪!的评论 (共 条)

分享到微博请遵守国家法律