我是 stackoverflow 和 C 的新手,我有一个问题。我需要编写一个程序来迭代数组,然后将内容取消引用为零。由于某种原因,我的“zero_out_array”只会将数组中的第一个数字更改为零,而不是其余的。这是我的代码,感谢任何帮助。
#include <stdio.h>
void print_array(int* p_array, int num_elements)
{
printf("print_array called:\n");
for (int i = 0; i < num_elements; i++)
{
printf("%d \n", p_array[i]);
}
}
void zero_out_array(int* p_array, int num_elements)
{
printf("zero_out_array called:\n");
*p_array = 0;
for (int j = 0; j < num_elements; j++)
{
printf("%d \n", p_array[j]);
}
}
int main()
{
int main_array[] = { 15, 24, 33, 42, 51 };
print_array(main_array, 5);
zero_out_array(main_array, 5);
return 0;
}
最佳答案
对于任何指针或数组p
和索引i
,表达式p[i]
和*(p + i)
是相同的。
现在,如果索引为 0
,则我们有 p[0]
,它与 *(p + 0)
相同,并且*(p + 0)
与 *(p)
相同,而 *(p)
与 *p
相同。
也就是说,如果您有一个指针并取消引用它,那么您将准确地获得指针所指向的内容,例如指针指向的数组中的第一个元素。
如果要将数组中的所有元素设置为零,您有两种选择:使用显式循环并将每个元素设置为零。或者,由于您有一个整数数组,您可以使用 memset
将数组中的每个字节设置为零。
使用memset
你可以这样做,例如
memset(p_array, 0, sizeof(*p_array) * num_elements);
关于c - 想要将我的数组内容归零。仅数组中的第一个数字更改为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37431870/