通过c语言代码,了解二维数组的一些基本概念。
#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 之外的其他值。