C语言教程中,数组是重点、难点,许多人其实是一知半解,小雅建议还未上路的人,认真阅读本章内容。下面先举例再说明。
#include
<stdio.h>int
main(void
) {int
i;int
iArr[7];char
cArr[] = {'Q','U','A','N','X','U','E'}; //给iArr数组赋值for
(i=0; i<7; i++) { iArr[i] = (i + 1) * (i + 1); } //输出iArr的内容for
(i=0; i<7; i++) printf(" %2d", iArr[i]); printf("\n"); //输出cArr的内容for
(i=0; i<7; i++) printf(" %2c", cArr[i]); printf("\n"); //输出超出数组范围内容。该行运行时会出错。 printf("iArr[7]=[%d] cArr[7]=[%c]\n", iArr[7]);return
0; }
弄清数组地址对使用数组有很大好处,另外,有的函数的参数是指针(如scanf函数),如果要用数组的某一元素作参数,就必须知道其地址。
#include
<stdio.h>int
main(void
) {int
i;int
iArr[7];char
cArr[] = {'Q','U','A','N','X','U','E'}; //输出iArr数组和cArr数组的地址 printf("iArr=%p, cArr=%p\n\n", iArr, cArr); //输出iArr[i]数组和cArr[i]数组的地址for
(i=0; i<7; i++) { printf("iArr[%d]=%p, cArr[%d]=%p\n", i, &iArr[i], i, &cArr[i]); }return
0; }
当一个数组定义的长度大于赋值的长度时,超出的部分被放弃;当数组定义的长度小于赋值的长度时,不足的部分被自动填上'\0',对于数值类型的变量,实际上就是赋值为0,对于字符类型实际上就是赋值为NULL。
#include
<stdio.h>int
main(void
) {int
i;int
iNum[4] = {100, 150}; //后两个被填上0char
str1[10] = {'q', 'u', 'a', 'n', 'x', 'u', 'e'};char
str2[6] = "quanxue";for
(i=0; i<4; i++) { printf("%5d", iNum[i]); } printf("\n%s\n", str1); //7,8,9三个元素被填上NULL,所以可以用字符串输出for
(i=0; i<10; i++) { //故意循环到10, 看看后面是否为“quanxue” printf("%c", str2[i]); //因为'e'和NULL被弃掉,所以不能用字符串输出 } printf("\n");return
0; }
#include
<stdio.h>int
main(void
) {int
i, j, k=0;int
iArr[4][5]; //输出iArr[i,j]数组的地址for
(i=0; i<4; i++) {for
(j=0; j<5; j++) { iArr[i][j] = k++; printf("iArr[%d,%d]=%2d &iArr[%d,%d]=%p\n", i, j, iArr[i][j], i, j, &iArr[i][j]); } printf("\n"); }return
0; }
从地址和内容可以看出,二维数组是一维数组的扩充,地址的排列也是顺序下去的。使用时注意2个下标,不要弄错就可以了。