#include <stdio.h>
int main()
{
char str[]="hello";
str[1]='h';
printf("%c\n",str[1]);
//printf("%c\n",str++);//编译不通过
//数据名相当于一个常量指针,即所指向的内容可以改变,但地址不能改变
char *strp="hello world";
//strp[0]='p';//1 此处不加注释会报错
strp=str; //2
printf("%c\n",*strp++);//3
/*strp为指向常量的指针,所指向的字符串内容不能改变,故第一句语句会报错
但其地址可以改变,现在strp指向"hello",第二句语句正常,自然第三句也正确*/
printf("str:%s\n",str);//1
printf("&str:%s\n",&str);//2
printf("%s\n",&str[0]);//3
/*以上三句都输出"hello",str指向的地址和&str、&str[0]的值是相等的,但是
&str与str或&str[0]的类型不同,&str是数组对象的地址,而str和&str[0]是数组
首元素的地址,但他们的值是相等的。*/
char c=*("hello world"+1);// 以前没遇到过
//"hello world"[2]='2';//1 这边运行出现错误,
printf("%c\n","hello world"[2]);//2 可以正常打印
/*根据以上两句结果来看,相当于将"hello world"看成是指向常量的指针*/
return 0;
}
上面是我学习数组、字符串常量学习的过程分析。(程序在vc6.0下面调试)程序的输出结果为:
本文的学习参考了一下:
http://www.cppblog.com/cc/archive/2011/11/04/4045.html和
http://bbs.chinaunix.net/thread-854146-1-1.html