c - 想要将我的数组内容归零。仅数组中的第一个数字更改为零

标签 c

我是 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/

相关文章:

C 切换逻辑功能未按预期工作

c - 事件驱动 IO 和阻塞与非阻塞

c - OpenCL:内核之间的同步

c++ - BST 中一个节点的所有父节点?

在文本段中创建具有给定大小的 C 函数

c - pthread_create(...) 执行函数 - 指针混淆

c - 如何在c中按字符位置拆分字符串

c - nlinfit Matlab函数等价函数c代码

C、获取unsigned char以使用ascii 2表

c++ - 从文本文件中读取数字字节