天天看点

字符数组与字符指针的内存分配和使用

 下面这段程序反映了C语言处理字符数组和字符指针的内存分配的方式:

  1. #include<stdio.h> 
  2. #include<stdlib.h> 
  3. void main() 
  4.     char *b ="qwerty";   //定义一个字符类型的指针,用一个字符串初始化,这时b保存的是此字符串第一个字符的地址 
  5.     printf("b=\t%s\n",b);    //输出从指针b开始的一个字符串(%s) 
  6.     printf("*b=\t%c\n",*b);   //输出字符指针b所指向的地址里保存的字符(%c) 
  7.     printf("b[2]=\t%c\n",b[2]); //输出从b所指向的地址开始数的第三个字符 
  8.     //b[2] = 'a';  //错误,b是字符指针,只能进行赋值,不能直接修改之后的元素 
  9.     char a[] = "abcde";  //定义一个字符数组,a此时保存的是这个字符数组的以一个元素在内存中的地址 
  10.     b = a;               //b获得了a的值,也指向了字符数组 
  11.     b[0] = 'y';          //此时可以直接赋值,因为b指向了数组 
  12. //b[7] = 'a'; //此修改编译时不会报错,但运行时却会造成数组越界
  13.     printf("a[]=\t%s\n", a);   //输出数组a的值,因为a和b指向了同一段内存地址,所以上一句对b的修改也是对a的修改 
  14.     printf("a[5]=\t%d\n", a[5]);//输出字符串最后的结束标志"\0" 
  15. b[2] = 0;            //将第三个字符替换成‘0’,会把字符串截断,导致输出不完整 
  16.     printf("b=\t%s\n", b);   //输出会只有前两个字符 
  17.     system("pause");     //VS中让命令行窗口暂停 

  输出:

b=      qwerty

*b=     q

b[2]=   e

a[]=    ybcde

a[5]=   0

b=      yb

请按任意键继续. . .

继续阅读