C语言二维数组
通过c语言代码,了解二维数组的一些基本概念。
- 二维数组的定义
- 二维数组的初始化赋值
- 二维数组的行数和列数 可参考:c语言-数组长度的计算(结构体数组,字符串数组)
- 二维数组的首地址
- 二维数组的memset赋值
代码
#include <stdio.h>
#include <string.h>//这里一定要注意:memset 函数是按字节对内存块进行初始化的。//对于 char 型的数组,可以将其初始化为任意一个字符。
//但对于 int 型的数组,由于 memset 函数按字节对内存块进行初始化,所以不能用它将 int 数组初始化为 0 和 -1 之外的其他值。int main(int argv,char *argc[]){int array[3][5]={{0,1,2,3,4},{0,1,2,3,4},{0,1,2,3,4}};for (int i = 0; i < 3; i++){for (int j = 0; j < 5; j++){printf("%d ", array[i][j]);}printf("\n");}printf("***************************************\n");printf("arryNum=%d\n", sizeof(array)/sizeof(array[0]));//共3行printf("arryInNum=%d\n", sizeof(array[0])/sizeof(int));//每行共5列printf("sizeof(array)=%d\n", sizeof(array));printf("sizeof(array[0])=%d\n", sizeof(array[0]));printf("sizeof(array[0])*3=%d\n", sizeof(array[0])*3);printf("addres array=%d,array[0]=%d,array[0][0]=%d\n", array,array[0],&array[0][0]);printf("***************************************\n");// 使用memset将二维数组清零,正确memset(array, 0, sizeof(array));// 打印清零后的二维数组for (int i = 0; i < 3; i++){for (int j = 0; j < 5; j++){printf("%d ", array[i][j]);}printf("\n");}printf("***************************************\n");//错误memset(array, 5, sizeof(array));// 打印清零后的二维数组for (int i = 0; i < 3; i++){for (int j = 0; j < 5; j++){printf("%d ", array[i][j]);}printf("\n");}printf("***************************************\n");// 使用memset将二维数组清零,正确memset((char *)array, 0, sizeof(array));// 打印清零后的二维数组for (int i = 0; i < 3; i++){for (int j = 0; j < 5; j++){printf("%d ", array[i][j]);}printf("\n");} printf("***************************************\n");//错误memset((char *)array, 0x000005, sizeof(array));// 打印清零后的二维数组for (int i = 0; i < 3; i++){for (int j = 0; j < 5; j++){printf("%d ", array[i][j]);}printf("\n");}return 0;
}
测试结果
注意事项
memset 函数是按字节对内存块进行初始化的。
对于 char 型的数组,可以将其初始化为任意一个字符。
但对于 int 型的数组,由于 memset 函数按字节对内存块进行初始化,所以不能用它将 int 数组初始化为 0 和 -1 之外的其他值。