1。字符数组与数字数组的赋值方式相同。例如
char ml[4]={'q','i','a','o'};
而字符串的定义,主要是以下格式。
char ml[5]="qiao";
or char ml[5]={'q','i','a','o','\0'};
定义字符串时要确定数组长度至少比字符数多1,因为末尾有空字符。或者直接写成
char ml[]="qiao";
让编译器来决定数组的长度。但是只有char[n]在C99之前是不合法的。
2。字符串和数组一样,它的名字等同于字符串首地址。
则有以下关系成立,例子如下。
char car[10]="Tata";
car==&car[0],*car=='T',and *(car+1)=car[1]=='a'
所以定义字符串也可以用指针。
接下来看以下的例子
const char *pt1="Something is new.";
const char ar1[]="Something is new.";
字符串可以用以上两种方式定义,那么有什么区别呢。
3。数组和指针方式的区别
数组的方式在内存中分配字符串长度+1的空间,当程序下载到内存中,字符串会被下载到静态内存中;而当程序运行时,字符串就会被复制到数组中。这时就会有两个字符串,一个在静态内存一个在数组里。
编译器会把ar1当作字符串首地址的符号,ar1是一个固定地址,不能改变ar1的值。ar1+1时允许的,而ar1++是不允许的。
指针的方式也会分配相同的长度在静态内存中,但当程序运行时只会额外给指针变量分配一个地址即可。因为指针是变量可以更改它的值。因此++pt1是被允许的。
这里要注意的是,字符串被认为是常量,指针方式是不能通过指针来改变字符串内容的,而数组方式已经将字符串从复制到数组,是可以任意改变其值的。