我想知道如何在C中使用该memset()函数two dimensional array.
我不想面对该阵列中的任何垃圾问题.如何初始化此数组?
有人能解释我如何实现它吗?
如果您的2D阵列具有静态存储持续时间,则默认初始化为零,即阵列的所有成员都设置为零.
如果2D阵列具有自动存储持续时间,则可以使用数组初始值设定项列表将所有成员设置为零.
int arr[10][20] = {0}; // easier way
// this does the same
memset(arr, 0, sizeof arr);
Run Code Online (Sandbox Code Playgroud)
如果动态分配数组,则可以使用memset将所有字节设置为零.
int *arr = malloc((10*20) * (sizeof *arr));
// check arr for NULL
// arr --> pointer to the buffer to be set to 0
// 0 --> value the bytes should be set to
// (10*20*) * (sizeof *arr) --> number of bytes to be set
memset(arr, 0, (10*20*) * (sizeof *arr));
Run Code Online (Sandbox Code Playgroud)
例如,如果您有一个整数数组并且想要显式使用 memset:
int array[M][N];
Run Code Online (Sandbox Code Playgroud)
您不需要在声明时使用 { 0 } 进行初始化。
只是
memset(array,0,M*N*sizeof (int));
Run Code Online (Sandbox Code Playgroud)
以上所有内容都是正确的,因为为了获得正确的数组大小,必须首先初始化数组。数组在指针中衰减到一级。
简单地:
int array[10][10]={0};
Run Code Online (Sandbox Code Playgroud)
它将把所有数组成员初始化为 0。
C99 标准 6.7.8.21:
如果大括号括起来的列表中的初始值设定项少于聚合的元素或成员,或者用于初始化已知大小的数组的字符串文字中的字符少于数组中的元素,则聚合的其余部分应与具有静态存储持续时间的对象一样隐式初始化。