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

仔细瞅了瞅,发现这个问题貌似触及到了我的知识盲区。于是跑去查了下资料,这里说一下我的成果:
首先,要区分两个概念,那就是左值与右值。何谓左值, 赋值运算符左边的即为左值,何谓右值,赋值运算符右边的称为右值。可以表示为:左值 = 右值。左值呢一般为具体的某块内存,右值则是内存中存储的数据。
然后回到我们的问题中,在程序中,主函数将数组mac的首地址传给func函数,程序原作者希望调用func函数,完成将字符串"1234"赋值给数组mac的前四个元素的工作。为什么程序最终没能实现该目的呢?我认为有如下几个原因:
1、c语言规定,对数组的操作不能整体进行,必须单个元素操作。
2、数组的地址是由编译器编译时直接给定的,数组变量的变量名与此地址直接绑定,也就说数组mac的首地址是一个常量,它不能作为左值,即不能对数组的地址进行变更,强行变更将会导致变更失败。
所以这个程序中,强行将字符串"1234"的首地址赋值给mac的首地址(常量),就导致了最终运行结果的失败。