作者:征途中的人(转载,请注明作者,请尊重原创)
一、一位数组的初始化
1、在定义数组时对数组元素赋予初值
int a[3]={1,2,3};
2、只给部分元素赋值
Int a[3]={1,2};
3、在对数组全部元素赋初值,由于数组个数已经确定,因此可以不指定数组长度
int a[3]={1,2,3};
或
int a[]={1,2,3}; //数组长度为3
4、如果想一个数组中全部元素为零,可以写成
int a[3]={0,0,0};
或
Int a[3]={0};
二、字符数组的一般初始化
1、最容易理解的方式是在定义时候,逐个字符赋给数组中的各个元素,进行初始化
Char c[3]={‘a’,’b’,’c’};
2、如果对在定义字符数组不初始化,则数组中各个元素的值是不可预料的。
字符个数大于数组长度则按语法错误处理。 Char c[2]={‘a’,’b’,’c’};
字符个数小于数组长度则其余元素自动定为空字符。Char c[4]={‘a’,’b’,’c’};
如下图:
C[0] |
C[1] |
C[2] |
C[3] |
a |
b |
c |
\0 |
|
|
|
|
3、如果字符个数与数组长度相同,在定义时可以省去数组长度,系统会自动根据数组字符个数确定数组长度。
Char c[5]={‘a’,’b’,’c’}; //长度为3
三、对字符串常量的一些认识
编译系统对字符串常量会自动加个’\0’作为结束标志。
用过以下语句输出一个字符串。
Printf(“how do you do?\n”);
在执行此语句时系统怎么知道应该输出哪里为止呢?
实际上,在内存中存放时,系统自动在最后一个字符’\n’的后面加个’\0’作为字符串结束标志。在执行printf函数时,每输出一个字符检查一次,看一个字符是否’\0’,遇到’\0’就停止输出。
四、用字符串常量使字符数组初始化
1、在定义字符数组的时候用字符串进行初始化
Char c[4]={“abc”}
需要说明的是:字符数组并不要求它的最后一个字符为’\0’,甚至可以不包含’\0’,像一下的写法是合法的
Char c[3]={“abc”}; 或 Char c[3]={‘a’,’b’,’c’};
是否要加’\0’,完全根据需要决定,但是由于系统对字符串常量自动加’\0’,因此为了使处理方法一致,便于测定字符串的实际长度,以及在程序中作为相应的处理。在字符处理上也会人为的加上一个’\0’.例如:
Char c[4]={‘a’,’b’,’c’,’\0’};
这样便于引用字符数组中的字符串。
char c[5]={“hello”}; 和char c[6]={“hello”};有什么区别呢
在字符串存储中最后都会自动加个一个结束符’\0’.所以存储5个字符需要6个空间。
所以char c[5]={“hello”};缺少结束符,但是调用c[0],c[1],c[2],c[3],c[4],是可以使用的,但是使用strlen(c),strcpy()等函数就会出现错误,因为找不到结束标志。
char c[6]={“hello”};可以正常使用,因为有结束标志’\0’,c[5]=’\0’;
2、可以部分赋值
Char c[6]={“abc”};
前三个元素为a,b,c,第四个元素为’\0’,后两个元素为空字符
a |
b |
c |
\0 |
\0 |
\0 |
3、可以省略数组长度
Char c[]={“abc”} 或char c[]=”abc” //数组长度为4
等价于
Char c[]={‘a’,’b’,’c’,’\0’};
不等价于
Char c[]={‘a’,’b’,’c’};
【上海索漫科技】提供
用户1607052 2012-6-24 21:27