1、数组未初始化导致结果错误
int b[10]={0}; //记得全部初始化为0,不然就注意不要读取未设置的数据
2、char型二维数组表示字符串并输出
//初始化
char c[101][101];
memset(c,'#',sizeof(c));//所有字符赋值‘#’
//赋值
char a[100]="abcd"; //占5个字节,还有一个'\0'结束符
strcpy(c[0],a); //字符串不能用=,只能用strcpy
//输出,只输出赋值了的
int i,j;
for(i=0;i<n;i++){
for(j=0;j<101 && (c[i][j]!='#');j++)
{
printf("%c",c[i][j]);
}
if(j!=0) printf("\n");
}
3、关于sizeof和strlen
sizeof用于计算数组的大小,数组的初始大小有多大,sizeof就多大。
strlen用于计算字符串的长度。
4、注意,在c语言中,数组,变量未初始化,都是乱码,随机数。所以一定要初始化。
char b[100]={'\0'}; printf("%s",b); //输出为空
char b[100]={0}; //与上面'\0'一样的效果,输出空。
char b[100]={'0'}; //输出为0
//第一个'0',后面99个默认为'0';但如果没有这步初始化,就是随机乱码
5、’\0’ 和 0,’0’区别
‘\0’常用于字符串结束标记,不能输出。\0的ascii码为0。
0就是普通的即时常量,ascii码为0。
‘0’是字符常量,ascii码为48。
如果是为了初始化,’\0’和0两者没有区别.所以代码中给字符数组最后一位添加结束标记形成字符串时写’\0’而不写0具有提示意义,便于阅读,没有别的意思。
6、关于数组的几点总结
a、数组只能在初始化时赋值,之后想赋值就要用memset。
int b[6]={1}; //输出结果:100000
int b[100];
memset(b,1,sizeof(b));//所有都赋值为1
b、两个数组之间不能相互赋值
int arr1[5] = {1,2,3,4,5};
int arr2[5];
arr2 = arr2; //错误!整个数组之间不能直接相互赋值。
//可以通过循环赋值,这也称为数组间的拷贝
for(int i=0;i<5;i++)
{
arr2[i] = arr1[i]; //正确,数组元素之间可以相互赋值。
}