【问题标题】:Why aren't my pointers to integer arrays working?为什么我指向整数数组的指针不起作用?
【发布时间】:2013-04-01 17:31:02
【问题描述】:

这里有问题:http://cps125.scs.ryerson.ca/labs/homework8.gif

这是我的尝试:

#include <stdio.h>

void tenfold(int (*array1)[9], int (*array2)[9])
{
    int i;
    for (i = 0; i < 9; i++) {
        if ((*array1)[i] > 0) {
            (*array2)[i] = 10 * (*array1)[i];
        } else {
            (*array2)[i] = (*array1)[i];
        }
    }
}

int main()
{
    int array1[9] = { 3, 4, 5, 6, 7, -8, -9, 1, 2 }, array2[9], i;

    tenfold(&array1, &array2);

    for (i=0; i < 9; i++) {
        printf("%lf ", array2[i]);
    }
    return 0;
}

这是输出:

44100667367791664000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000.000000 441006673677917200000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000.000000 4410066736779177 6000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000.000000 4410066736779183200000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000.000000 44100667367791888000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000.000000 441006913918453040000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000.000000 441006913918452980000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000.000000 4410066736779155 2000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000.000000 4410066736779160800000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000.000000

【问题讨论】:

    标签: c arrays pointers


    【解决方案1】:

    这里至少有一个问题:

    printf("%lf ", array2[i]);
    

    %lf 字面意思是“长浮点数”,但是你想打印整数:

    printf("%i\n", array2[i]);
    

    还要记住 printf 等待 \n 刷新。

    编辑:正如 newacct 所指出的,%f%lf 最后都是 double,因为可变参数将 float 提升为 double

    【讨论】:

    • @user1251385 总是编译器带有-Wall 选项
    • 如前所述,使用-W -Wall -Werror 编译可以防止此类错误的发生。也读人!
    • printf中,%lf%f相同(都是double
    【解决方案2】:

    "%lf" 是浮点数的格式,而不是整数。

    【讨论】:

      【解决方案3】:

      函数tenfold中输入数组的定义不需要加星号

      只要定义如下

      void tenfold(int array1[9], int array2[9])
      

      在函数tenfold中使用array1array2时去掉星号*

      void tenfold(int array1[9], int array2[9])
      {
          int i;
          for (i = 0; i < 9; i++) {
              if ((array1)[i] > 0) {
                  (array2)[i] = 10 * (array1)[i];
              } else {
                  (array2)[i] = (array1)[i];
              }
          }
      }
      

      当您在main 中调用tenfold 函数时:

      tenfold(array1, array2);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-22
        • 2011-12-16
        • 1970-01-01
        • 1970-01-01
        • 2018-01-03
        • 2012-01-24
        • 1970-01-01
        • 2019-10-27
        相关资源
        最近更新 更多