C 数组
数组是标准C里面最重要的集合数据类型,数组可以看做是多个相同类型变量组成的集合。数组在C89中是定长的,在C99中可以是变长的,变长的意思是可以通过变量来定义数组的长度。
一、和Java差不多
#include <stdio.h>
int main(){
int a[3],avg,sum;
int i=0;
printf("请输入3个整数:\n" );
for(sum=0;i<3;i++){
scanf("%d",&a[i]);
sum +=a[i];
}
avg = sum/i;
printf("求和=%d,求均值=%d",sum,avg);
getch();
return 0;
}
int main(){
int a[3],avg,sum;
int i=0;
printf("请输入3个整数:\n" );
for(sum=0;i<3;i++){
scanf("%d",&a[i]);
sum +=a[i];
}
avg = sum/i;
printf("求和=%d,求均值=%d",sum,avg);
getch();
return 0;
}
请输入3个整数:
12
13
14
求和=39,求均值=13
12
13
14
求和=39,求均值=13
二、数组的遍历
求数组长度,需要用sizeof运算符。
sizeof(数组变量名)这个算出来的是数组总长度所占字节数。
实际上,数组长度=总字节数/数组第一个元素的字节数。
#include <stdio.h>
int main(){
int a[3]={1,2,3};
int i;
printf("数组所占字节数为:%d\n",sizeof(a));
for(i=0;i<sizeof(a)/sizeof(a[0]);i++){
printf("%d\n",a[i]);
}
getch();
return 0;
}
int main(){
int a[3]={1,2,3};
int i;
printf("数组所占字节数为:%d\n",sizeof(a));
for(i=0;i<sizeof(a)/sizeof(a[0]);i++){
printf("%d\n",a[i]);
}
getch();
return 0;
}
数组所占字节数为:12
1
2
3
1
2
3
C中遍历数组还要注意一点就是不能在for语句的第一个初始化语句中定义变量。比如:for(int i =0;i<...... ,这是java 的写法。如果按照Java的写法写就挂了。
三、变长数组
#include <stdio.h>
int main(){
int x,i,sum=0,avg=0;
int a[x];
printf("请输入数组长度:" );
scanf("%d",&x);
printf("请输入%d个整数:\n" ,x);
for(i=0;i<x;i++){
scanf("%d",&a[i]);
}
printf("\n数组的长度为:%d",x);
printf("\n数组的内容:" );
for(i=0;i<x;i++){
printf("%d,",a[i]);
}
getch();
return 0;
}
int main(){
int x,i,sum=0,avg=0;
int a[x];
printf("请输入数组长度:" );
scanf("%d",&x);
printf("请输入%d个整数:\n" ,x);
for(i=0;i<x;i++){
scanf("%d",&a[i]);
}
printf("\n数组的长度为:%d",x);
printf("\n数组的内容:" );
for(i=0;i<x;i++){
printf("%d,",a[i]);
}
getch();
return 0;
}
请输入数组长度:4
请输入4个整数:
4
2
3
1
数组的长度为:4
数组的内容:4,2,3,1,
请输入4个整数:
4
2
3
1
数组的长度为:4
数组的内容:4,2,3,1,
四、字符数组
字符数组比较特殊点。
char c[3]={'a','b','c'};
char d[3]="abc";
char d[3]="abc";
两个数组是不同的:
1、长度不同:c长度是3,d长度是4.
2、一个正确,一个错误,c是正确,d是错误的。
正确写法应该是:
char c[3]={'a','b','c'};
char d[4]="abc";
char d[4]="abc";
五、字符串
C中,字符串和字符、字符数组有联系,上面看到了,但是也有很大差异。
1、明确说还没有定义字符串的关键字,如果有,那就是字符数组了。
2、字符串和字符除了双单引号的定义差别外,还有就是字符串总是以一个不可见的转移字符\0结尾,这个\0是字符串结束的标记。因此表面上看到的字符串长度总是比实际长度小1.
3、使用%s格式在printf函数中输入输出字符串。
六、多维数组
这些数组的特性和java中的完全一样,没啥好说的了。