【问题标题】:how can I avoid getting 0 as a print value for adding pointers in C如何避免将 0 作为在 C 中添加指针的打印值
【发布时间】:2021-04-02 01:34:05
【问题描述】:

当我试图了解指针在 C 中的工作方式时,我编写了以下代码,该代码接受输入并将其添加到 1,然后将其打印出来,但问题是每次打印输出时我都会得到零/null ,如何避免打印空值?

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

int main(){

    int **q_Quantity,*pQuantity,input =0;

    printf("Enter number:");
    scanf("%d",&*pQuantity); //takes input
    
    //pQuantity = (int *)malloc(*pQuantity+sizeof(int)*1);

    pQuantity = *&pQuantity+1;//gives a 0

    printf("%d\n",*pQuantity);
}

【问题讨论】:

  • 你所做的是未定义的行为,你很幸运能得到任何输出。
  • 您认为&amp;*pQuantity 和pQuantity 之间的区别是什么?
  • 我是否应该将它存储在一个 int 变量中,例如 int sum = *&amp;pQuantity+1; ?是不是不能把1加到指针上然后打印出来?
  • 哦,我意识到我的错误谢谢忍者

标签: c pointers add


【解决方案1】:
当您将

pQuantity 传递给 scanf 时,它未初始化,因此它的值为 indeterminate。 scanf 然后尝试取消引用该未初始化的指针以写入从用户读取的值。尝试读取和取消引用不确定的指针会调用 undefined behavior。

此外,当您将 &amp; 运算符应用于 * 运算符的结果时,它们会相互抵消。所以&amp;*pQuantity 和pQuantity 完全一样。

你可能想要的是这样的:

int *pQuantity,input =0;
pQuantity = &input;

printf("Enter number:");
scanf("%d",pQuantity);

*pQuantity = *pQuantity+1;
printf("%d\n",*pQuantity);

【讨论】:

  • 哦,我明白了,所以我应该总是为某些东西分配指针。非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-29
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多