关于数组名是常量的疑惑

来源:百度知道 编辑:UC知道 时间:2024/06/03 22:05:35
关于这个问题,在网上搜了不少帖子来看,还是没把疑惑解开。

char str[]="abcde12345";
声明后,在栈中分配了11个字节的空间用于储存abcde12345\0。
str则代表这一串字符数组的首地址,是常量!那么这个地址值存放在内存哪个区?还是虚无的,不占用任何空间的编绎指示?
有种声明char *const P;上面的str常量跟这里的p应该不同吧?总之两个字:蒙了。

内存是有地址的,str表示"abcde12345"在内存的地址
str不是一个变量,它只是编程,写代码需要,编译器识别需要
如果 &"abcde12345"可以代表"abcde12345"在内存的地址
我完全可以用&"abcde12345"代替str
但是实际上不行,因为编译器不认识它
所以str你就看成一个标识符就可以,它就代表首地址

数组名是地址常量。编译过程中编译器把str的值写入目标代码。运行时这个值并不占用内存。
char *const P在C中是限制改变的变量,在C++是常量。只有后者是真正的常量,和上面的常量相同。

首先数组名代表的是这个数组的首地址。。也就是代表的是一个地址。
只要你这个数组确定了以后,那么首地址肯定是不变的。
什么叫常量呢??就是不改变的数叫常量 。
所以显然叫他做常量是可以的。

他内存放在哪个区???这个电脑会给他一块让他存放的地方,这个楼主只要知道有这样一个地方就可以了。不用深究。这个肯定有占空间的。

用const的意思是指。你这个地址不允许强行改变。就好比你本来常量2,你现在要强行令他等于3一样。
这个const就是限制数据的改变。
上面的str常量跟p一样的。还是指的是数组的首地址(这个地址当然是确定的)
具体说,就是不允许对这个数组指针做改变

不同 数组名就是一个地址,啥也不能存放,就一个表示地址的数,指针是一个变量,他有一个地址,但他的存储内容和他的地址是不一样的,

#include<stdio.h>
#include <string.h>
void main( )
{
char *p="asdasdasd"; //指向内容是常量 不能修改其内容 可以修改其地址
const char* q; //指向内容是常量 不能修改其内容 可以修改其地址
char *const r="asdasdasd&quo