【问题标题】:Printing array's content in c在c中打印数组的内容
【发布时间】:2012-05-07 01:45:04
【问题描述】:

我有这个非常简单的代码:

#include <stdio.h>
#include <stdlib.h>


int maxArr(int *arr)
{
    int i=0;
    for (i = 0; i < 10; ++i)
    {
        printf("%d\n",arr[i]);
    }
    return 0;
}


int main()
{
    int* i = {0,1,2,3,4,5,6,7,8,9};
    maxArr(&i);
    return 0;
}

但不是打印 0,1,2,3,4,...,9

我明白了:

0
0
0
0
0
0
1809693728
32767
203279940
1

为什么?

【问题讨论】:

  • 您忽略了多少编译器警告?如果没有答案,您需要获得更好的编译器,或者了解如何打开基本警告。

标签: c arrays pointers printf


【解决方案1】:

i 的初始化更改为:

int i[10] = {0,1,2,3,4,5,6,7,8,9};

...然后用i 拨打maxArray;即maxArray(i)

【讨论】:

    【解决方案2】:

    你需要传入i,而不是&amp;i

    int main()
    {
        int* i = {0,1,2,3,4,5,6,7,8,9};
        maxArr(i);
        return 0;
    }
    

    您不是遍历数组,而是遍历从 &amp;i 开始的内存地址。

    【讨论】:

      【解决方案3】:

      你给出了错误的指针——你得到了错误的数据(在最好的情况下):

      maxArr(&i);
      

      应该是

      maxArr(i);
      

      我想知道你为什么没有收到通过int ** 而不是int * 的警告

      【讨论】:

        【解决方案4】:

        你做错了。

        这里 i 已经指向数组的第一个元素。

        int* i = {0,1,2,3,4,5,6,7,8,9};
        maxArr(&i);
        

        i 存储在某处,例如内存位置 xyz,在 xyz 处,您存储了另一个内存位置,即数组的第一个元素的位置,例如 abc 所以当你通过 &i 时,它会发送 i 的位置,即 xyz 而不是 abc。

        要更正它,请将代码更改为

        int* i = {0,1,2,3,4,5,6,7,8,9};
        maxArr(i);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-04-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多