C语言中 char ch[8] = "hello";求这条语句的执行原理?

有人说是 复制常量区的hello的每个字符到这个字符数组里面,还有人说是ch这个数组的首地址直接指向了内存中“hello”这个字符串的首地址,没有经过复制。 到底是怎么样的?我比较倾向于第二种解释,因为如果是第一种的话,那相当于多调用了一次字符串拷贝函数,而且拷贝之后,以前字符串的那段内存区域没有指针指向,岂不是永远释放不了了,求指定,不胜感激

第1个回答  2019-02-19
ch本来就是"hello"存放的首地址啊
何来多种解释?
如果第一种解释
请问怎么找到"hello"这个字符串?既然找不到又何来复制到ch[]
如果能找到能复制,又何来释放不了呢??
第2个回答  2020-07-21
其实只要能理解,两种说法都行。当然第二种确实说的比较完整点。因为这个是一个hello字符串,有一个结束标示符也占一个字节,第一种说法只是说ch是一个数组,一个个字符的复制,也不是不行,只是少了字符串这个概念。
第3个回答  2020-04-19
正常答案是第一种。
原因其实很简单的,当然需要两份空间了,ch只是栈上的变量,每次进入其所有作用域时都需要初始化其内容的,所以必须在常量区里面存储一份,不然后面ch的进行修改后可怎么办?
第4个回答  2019-09-11
堆内存
才会有释放问题,
栈内存
自动释放,用完随即释放
变量从没有到创建内存并赋值,肯定存在拷贝的过程,不是你理解的strcat就是了
说白了就是先创建一个
8bit
的空间,然后写数据,完成后写入$,并返回首地址和偏移量