【发布时间】:2020-02-18 02:27:00
【问题描述】:
我试图弄清楚为什么当我从函数内部调用 memset 时它不起作用。 当然,我可以使用 for 循环来重置所有值,但我是来学习的,这件事让我无法解释。
/* First source code */
#include <stdio.h>
#include <string.h>
int main(void) {
int i, j, num;
printf("Digit a number :");
scanf("%d", &num);
int magic[num][num];
printf("First\n");
for(i = 0; i < num; ++i) {
for(j = 0; j < num; ++j) {
printf("%4d", magic[i][j]);
}
printf("\n\n");
}
memset(magic, 0, sizeof(magic));
printf("Before\n");
for(i = 0; i < num; ++i) {
for(j = 0; j < num; ++j) {
printf("%4d", magic[i][j]);
}
printf("\n\n");
}
return 0;
}
/* Second source code */
#include <stdio.h>
#include <string.h>
void create_magic_square(int n, int magic_square[][n]);
void print_magic_square(int n, int magic_square[][n]);
int main(void) {
int num;
printf("Digit a number :");
scanf("%d", &num);
int magic[num][num];
create_magic_square(num, magic);
return 0;
}
void create_magic_square(int n, int magic_square[][n]) {
int i, j;
printf("First\n");
for(i = 0; i < n; ++i) {
for(j = 0; j < n; ++j) {
printf("%4d", magic_square[i][j]);
}
printf("\n\n");
}
//memset(magic_square, 0, n * sizeof(magic_square[0]));
memset(magic_square, 0, sizeof(magic_square));
printf("Before\n");
for(i = 0; i < n; ++i) {
for(j = 0; j < n; ++j) {
printf("%4d", magic_square[i][j]);
}
printf("\n\n");
}
}
在第二个代码(带有函数)中,我应该输入以下代码: memset (magic_square, 0, n * sizeof (magic_square [0])); 用于清除二维数组,同时: memset (magic_square, 0, sizeof (magic_square)); 不起作用。为什么会这样?
【问题讨论】:
-
打印
sizeof的结果,你大概看看指针的大小吧!
标签: c arrays function c99 memset