代码改变世界

字符串字面量与指针

2013-08-23 17:46  minus01  阅读(996)  评论(0编辑  收藏  举报
 1 #include <stdio.h>
 2 
 3 int main(int argc, const char *argv[]) {  
 4 
 5   char *str, *p;  int len;
 6 
 7   str = "c program!";    
 8 
 9   p = str;
10 
11   while(*p != '\0')   
12 
13     p++;
14 
15   len = p - str;
16 
17   printf("str:%s, len:%d\n", str, len);
18 
19   return 0; 
20 
21 }

str:字符指针变量,位于内存中的栈区;

“c program”:字符串字面量(字符串常量),用一对双引号括起来的字符序列。存储于内存中的常量区;

从本质而言,C语言把字符串字面量作为 只读 的字符数组来处理,因此 编译器会把字符串字面量看作是char *类型的指针。例如:   printf(“abc”);    //当调用printf函数时,会传递“abc”的地址(即指向存储字母a的内存单元的指针)

通常情况下,C语言下可以在允许使用char *指针的地方使用字符串字面量。

1 例如: 字符串字面量用于=右边赋值:
2     char *p;
3       p = "abc";          //使p指向字符串的第一个字符

 

1 例如:C语言允许对指针取下标,因此可以对字符串字面量取下标
2     char ch;
3     ch = "abc"[1];         //赋值后ch的值为b