下面这段程序反映了C语言处理字符数组和字符指针的内存分配的方式:
- #include<stdio.h>
- #include<stdlib.h>
- void main()
- {
- char *b ="qwerty"; //定义一个字符类型的指针,用一个字符串初始化,这时b保存的是此字符串第一个字符的地址
- printf("b=\t%s\n",b); //输出从指针b开始的一个字符串(%s)
- printf("*b=\t%c\n",*b); //输出字符指针b所指向的地址里保存的字符(%c)
- printf("b[2]=\t%c\n",b[2]); //输出从b所指向的地址开始数的第三个字符
- //b[2] = 'a'; //错误,b是字符指针,只能进行赋值,不能直接修改之后的元素
- char a[] = "abcde"; //定义一个字符数组,a此时保存的是这个字符数组的以一个元素在内存中的地址
- b = a; //b获得了a的值,也指向了字符数组
- b[0] = 'y'; //此时可以直接赋值,因为b指向了数组
- //b[7] = 'a'; //此修改编译时不会报错,但运行时却会造成数组越界
- printf("a[]=\t%s\n", a); //输出数组a的值,因为a和b指向了同一段内存地址,所以上一句对b的修改也是对a的修改
- printf("a[5]=\t%d\n", a[5]);//输出字符串最后的结束标志"\0"
- b[2] = 0; //将第三个字符替换成‘0’,会把字符串截断,导致输出不完整
- printf("b=\t%s\n", b); //输出会只有前两个字符
- system("pause"); //VS中让命令行窗口暂停
- }
输出:
b= qwerty
*b= q
b[2]= e
a[]= ybcde
a[5]= 0
b= yb
请按任意键继续. . .