字符指针和字符数组

2017年12月19日17:12:10
字符指针和字符数组的整理
 
1.
字符数组是由若干个元素组成,每个元素中存放的是一个字符,而字符指针变量中存放的是第一个字符的地址

2.
char * a;a = "I love China";指针变量可以赋值,但是数组名不可以这样赋值。
char a[12]; a[0]='I';合法的。 a = "I love China";//不合法!!!

3.char *p = "I love China";//定义指针变量p,并且指向第一个元素I的地址。
 等价于:char * a;a = "I love china!";
  但是数组:
   char str[14]="I love China!";
 不等价于char str[14];str[]="I love China"; //报错!!!!

4.字符数组分配若干个存储单元,但是指针变量值分配一个存储单元。

5.指针变量的值是可以改变的,而数组名代表一个固定的值(数组首元素的地址),不能改变。
 eg: char *a = "I love China";
  a = a+7;//正确,指向C的地址
  char str[]={"I love China"};
  str = str+7;//报错!!!
  

6.字符数组中的各元素的值是可以改变的(可以对他们再赋值),但字符指针变量指向的字符串常量中的
 内容是不可以被取代的(不能再对它进行赋值)。
 char a[] ="House";
 char * b="House";
 a[2] = 'r';//合法,r取代a数组元素中a[2]的原值u
 b[2]='r';//非法,字符串常量是不能改变的
 

7.用指针变量指向的一个格式字符串,可以用它代替printf函数中的格式字符串。
 char * format;
 format = "a = %d,b=%f ";//等价于:char format[]="a=%d,b=%f ";
 printf("format,a,b");
 注意:定义数组时初始化或逐个对元素赋值,而不能用赋值语句对数组整体赋值
  eg:char format[];
  format="a=%d,b=%d ";

原文地址:https://www.cnblogs.com/healy/p/8072687.html