как я могу избежать получения 0 в качестве значения печати для добавления указателей в C

#c #pointers #add

#c #указатели #Добавить

Вопрос:

пока я пытался понять, как работают указатели в C, я написал следующий код, который принимает входные данные и добавляет их к единице, а затем выводит их, но проблема в том, что я продолжаю получать ноль / нуль каждый раз, когда он печатает выходные данные, как я могу избежать печати нулевого значения?

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

int main(){

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

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

    pQuantity = *amp;pQuantity 1;//gives a 0

    printf("%dn",*pQuantity);
}

 

Комментарии:

1. То, что вы делаете, — это неопределенное поведение, вам повезло, что вы вообще получаете какой-либо вывод.

2. Как вы думаете, в чем разница между amp;*pQuantity и pQuantity ?

3. Должен ли я был хранить его в переменной int, например int sum = *amp;pQuantity 1; ? разве невозможно добавить 1 к указателю, а затем распечатать его?

4. ооо, я понял свою ошибку, спасибо, ниндзя

Ответ №1:

pQuantity неинициализируется при передаче его scanf , поэтому его значение не определено. scanf затем пытается разыменовать этот неинициализированный указатель для записи значения, считанного от пользователя. Попытка чтения и разыменования неопределенного указателя вызывает неопределенное поведение.

Кроме того, когда вы применяете amp; оператор к результату * оператора, они отменяют друг друга. So amp;*pQuantity точно такой же, как pQuantity .

Вероятно, вам нужно что-то вроде этого:

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

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

*pQuantity = *pQuantity 1;
printf("%dn",*pQuantity);
 

Комментарии:

1. о, я понимаю, поэтому я всегда должен назначать указатели на что-то. большое вам спасибо