我是第一名 发表于 2021-10-18 17:23:31

C语言地址问题

假如我定义了
char a1[]="123456";
char a2={‘0’};
如果我想让a2拷贝a1,为什么不可以直接a2=a1?

我的理解是:
因为数组名是首元素地址,那么我将a1的地址赋给a2,那么a2也指向a1的首元素地址。
哪错了?

人造人 发表于 2021-10-18 17:25:11

很简单,数组不支持这样赋值,语言就是这样定义的
C语言就规定不能这样

嘉岳呀 发表于 2021-10-18 17:35:13

ANSI C、C99、C11、C17 都不允许这样赋值

你要是想问就问由 丹尼斯·里奇 和 肯·汤普逊 吧

jackz007 发表于 2021-10-18 18:52:47

本帖最后由 jackz007 于 2021-10-18 18:56 编辑

       a1、a2 都是内存地址没错,可问题的关键是,数组名称与内存地址是绑死在一起的,它们都不能被赋值,也就是说,它们都是只读的,在这一点上区别于一般的指针型变量。

15923983151 发表于 2021-10-18 19:32:21

记忆中语言就是这么规定

hrpzcf 发表于 2021-10-18 19:54:11

我是第一名 发表于 2021-10-18 20:39:31

人造人 发表于 2021-10-18 17:25
很简单,数组不支持这样赋值,语言就是这样定义的
C语言就规定不能这样

我也知道规定,只是我先主学了java,它允许一个数组成为另一个数组的管理者{:10_249:} 所以现在学回C的时候感觉到有疑问 haha ~

人造人 发表于 2021-10-18 20:44:25

我是第一名 发表于 2021-10-18 20:39
我也知道规定,只是我先主学了java,它允许一个数组成为另一个数组的管理者 所以现在学回C的时 ...

对呀,C语言不允许这样做
就是这样
页: [1]
查看完整版本: C语言地址问题