? ? ? ? 存放的类型是一致的,多个数组元素的地址是连续的;? ? ??
? ? ? ? 最大特点:一次存入,多次使用;
? ? ? ? 数组的类型,名称及长度;如:int a[5];
? ? ? ? 注意:定义数组的个数不是变量一定是常量!
/*现在有一个数组,存储是score[75,68,89,72,62,83,85,92]
要求:
1.求总分,求平均分
2.用指针遍历数组,求最大值和最小值*/
#include <stdio.h>
int main() {
int score[8] = { 75,68,89,72,62,83,85,92 };
int sum = 0, avg = 0, max = 0, min = 100;
int* p; //定义p为指针变量
for (p = &(score[0]); p <= &(score[7]); p++) {
sum += *p;
if (*p > max) {
max = *p;
}
if (*p < min) {
min = *p;
}
}
printf("sum=%d avg=%.2f", sum, sum / 8.0);
printf(" max=%d min=%d", max, min);
}
? ? ? ? 对a[10]这个数组进行分析
? ? ? ? 1.a表示数组名,是第一个元素的地址,也是元素a[0]的地址等价于&a;
? ? ? ? 2.a是地址常量,所以只要出现a++,或a=a+2的赋值都是错误的;
? ? ? ? 3.a是一维数组名,所以它是列指针,也就是说a+1是跳一列;
? ? ? ? 可以缺少行,但不能缺少列!?
? ? ? ? 对a[3][3]二维数组进行分析
? ? ? ? 1.a表示数组名,是第一个元素的地址,也就是元素a[0][0]的地址;
? ? ? ? 2.a是地址常量,所以只要出现a++,或a=a+2赋值都是错误的;
? ? ? ? 3.a是二维数组名,所以它是行指针,也就是a+1是挑一行;
? ? ? ? 4.a[0]、a[1]、a[2]也都是地址常量,不可以对它进行赋值操作,同时它们都是列指针a[0]+1、a[1]+1、a[2]+1都是跳一列;
? ? ? ? 5.注意a和a[0]、a[1]、a[2]是不同的,它们的基类型是不同的,前者是一行元素,后三者是一列元素;
#include <stdio.h>
int main() {
int a[3][3];
int i, j;
int m = 0, n = 0;
for (i = 0; i <= 2; i++) {
for (j = 0; j <= 2; j++)
scanf("%d", &a[i][j]);
}
for (i = 0; i <= 2; i++)
{
m += a[i][i];
n += a[i][2 - i];
}
printf("%d %d", m, n);
return 0;
}
(重点) 表达式:
? ? ? ? ? ? ? ? 1.a[2]可变成*(a+2)
? ? ? ? ? ? ? ? 2.a[2][3]可变成*(a+2)[3],再可变成*(*(a+2)+3);????????
?