【问题标题】:Why is this printing the memory location of array elements of second and third arrays?为什么要打印第二个和第三个数组的数组元素的内存位置?
【发布时间】:2022-11-27 00:27:48
【问题描述】:
char model[10][15] = {"Honda","Audi","Ferrari","Jeep","Toyota","Bugatti","Ford","Jensen","Porsche","Suzuki"};
int price[10][15] = {750000,650000,950000,300000,900000,1000000,400000,750000,300000,800000};
int remain[10][15] = {3,4,5,3,3,7,8,2,1,2,2};

for(i=0;i<11;i++){
            printf("\n%s\t %d\t %d\t",model[i],price[i],remain[i]);
        }

我尝试了各种各样的事情,但没有任何效果......我是一个新的 C 程序员(刚从 JAVA 跳出来)

【问题讨论】:

    标签: arrays c


    【解决方案1】:

    因为你声明你的数组是错误的。

    char *model[11] = {"Honda","Audi","Ferrari","Jeep","Toyota","Bugatti","Ford","Jensen","Porsche","Suzuki"};
    int price[11] = {750000,650000,950000,300000,900000,1000000,400000,750000,300000,800000,9000};
    int remain[11] = {3,4,5,3,3,7,8,2,1,2,2};
    

    【讨论】:

      【解决方案2】:

      model 是一个由 10 个数组组成的数组,每组 15 个 char。

      因此 model[i] 是这 10 个数组之一;它是一个 15 char 的数组。

      当数组用于表达式而不是 sizeof 或一元 &amp; 的操作数或用作用于初始化数组的字符串文字时,它会自动转换为指向其第一个元素的指针。因此,使用model[i] 作为printf 的参数传递指向数组model[i] 的第一个元素的指针。

      对于%s,printf 需要一个指向char 的指针,它会打印它在内存中从该位置开始找到的字符串。所以传递model[i]传递了一个与%s一起工作的指针。

      price 是一个由 10 个数组组成的数组,每组 15 个 int。

      因此 price[i] 是这 10 个数组之一;它是一个 15 int 的数组。

      将price[i] 传递给printf 传递指向数组price[i] 的第一个元素的指针。

      对于 %d,printf 需要一个 int 值,而不是指针,因此传递 price[i] 不起作用。

      相反,您希望 price 是一个包含 10 个 int 的数组。那么price[i] 将是一个int,而不是int 的数组。为此,请更改定义:

      int price[10] = {750000,650000,950000,300000,900000,1000000,400000,750000,300000,800000};
      int remain[10] = {3,4,5,3,3,7,8,2,1,2,2};
      

      然后将price[i] 传递给printf 将传递int,而不是指针。

      【讨论】:

      • 哇,我没想到我会这么快得到回复。非常感谢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      • 2017-11-22
      • 2012-04-28
      • 2011-06-18
      • 1970-01-01
      • 2022-11-12
      • 2022-11-16
      相关资源
      最近更新 更多