C语言中,怎么理解“字符串常量给出的是地址值”??

如题所述

C语言中的字符串实际上就是char类型的一维数组。按照约定,C的字符串是以字符串结束标志/ 0 (或null)结尾的。null字符就是所有位均为 0 的字符。因此,它的十进制值是 0 。由于字符串的处理具有它自己的方式,因此我们把它当作一个独立的主题。把字符串看成是长度可变,由/ 0 定界、但最大长度不超过字符串本身长度的这种观点是非常有用的。字符串的长度必须包含存储结尾的/ 0 字符所需要的存储空间。和所有数组一样,程序员应该确保字符串的边界未超出。
字符串常量由一对双引号所包围。例如,"abc"是一个长度为4的字符数组,其中最后一个元素是结尾字符/ 0 。注意,字符串常量和字符常量是不同的概念。例如,'a' 和 "a" 并不相同。后者拥有两个元素,一个是'a' ,另一个是'/ 0 '。
字符串常量和数组名一样,也是被编译器当成指针来对待的。它的值就是字符串的基地址。
考虑下面的代码:
char *p="abc";
printf("%s %s/n",p,p+1);
变量p被赋值为字符数组"abc"的基地址。当一个char类型的指针按照字符串格式打印时,被指向的字符以及每个后续字符都被打印出来,而指向字 符串"abc"中字母b的表达式p+1将导致bc被打印出来。由于象"abc"这样的字符串常量是被当作指针看待的,因此下面的两个表达式都是可行的:
"abc"[1] 和 *("abc"+2)
如果输出的话结果应该是bc 和c。下面我们通过一个具体例子来说明。
int main(void)
{
printf("%c%c%c%c!/n",
"ghi"[1],*("def"+1),
*"abc"+11,"klm"[1],*"ghi"+8);
getch();
}
以上程序编译运行后可以看到运行结果为:hello!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-12-18
C中字符串实际上是字符数组,通过指针地址来操作,所以其实定义的是指针追答

可能我描述的不对,你去研究下指针的用法和概念应该就能理解了

第2个回答  2015-10-13
给出字符串的定义:
字符串是以空字符结尾的char型数组
再给出字符串常量的定义:
字符串常量又称为字符串文字,是指位于一对双引号中的任何字符。双引号里面的字符加上编译器自动提供的结束标志\0字符,作为一个字符串被存在数组当中。
那么怎么理解“字符串常量给出的是地址值”呢?
看到这里就要知道在调用一个数组的时候,一般是给出这个数组的首元素的地址值,数组a的首元素的地址值&a[0]就是我们首先得到的一个数组的调用的值。那么上面也说过了,字符串常量作为一个数组,被储存在内存中,内存是按地址来分配空间的,当调用一个字符串常量的时候,就会得到这个字符串它的地址值。也就是这个意思。
相似回答