请问char a[]="abc";和 char *p="abc";到底哪里不同,我看教程,他对char a[]="abc" 讲解是,先在内存开辟一连续存储单元(a),然后把字符串存放到这些存储单元去,这个我能理解。就是不明白char *p="abc";是什么含义。指针存放的应该是地址值吧??这里有什么玄机???谁给我讲讲,谢谢啊最好通俗点说明,我是新手,呵呵char *p,中的指针p,在内存中有没有给他开辟空间?为什么我printf("%d",p);是错误的?
简单说“abc”是字符串常量,C中没有字符串变量,所以在存放字符串常量时一般采用字符数组来存储。 实际上数组是一个连续的存储空间,这里记录着两个重要的量:首地址和空间大小。首地址用数组名a来记录,尔空间大小用a的下标与数组元素的大小的乘积来表示。 但对于字符串往往不关心到底占用多大的存储空间,只知道是字符串就可以了。做处理的时候“abcde”和“abcdefgh……z”的过程是一样的,反正最后都是字符串结束标志'\0',所以字符按串的长度显得不是特别重要。这也是为什么char a[]="abc";中并不指定a数组的长度。 因此往往只要记录字符串的首地址就可以了。而指针正是记录地址的不二人选。 所以,对于老手在做字符串的题目的时候,不关心其长度,只要记录下首地址就OK了。定义形势就是char *p="abc"; 本质上char a[]="abc";和 char *p="abc"; 是一样的。
char *p="abc"; 也是在内存开辟一连续存储单元,将abc放在里面,而p就指向了这块存储单元的首地址而且这块存储单元的大小就是4个字节,包含结束符 \0如果程序后边将p 指向别处那麽 这块4字节的存储单元就会被丢失,在程序中无法再被访问到