#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. о, я понимаю, поэтому я всегда должен назначать указатели на что-то. большое вам спасибо