Если вы хотите отсканировать значение, на которое указывает x, используйте x , например: scanf("\n%d", x)
.Чтобы напечатать значение, которое вы только что поместили, передайте x следующим образом: bintest(x);
, но напечатайте * y следующим образом: printf("%d", *y);
scanf("\n%d", &x);
- это то же самое, что x = scan;
scanf("\n%d", x);
- это то же самое, что и *x = scan;
, что вам нужно.
Так что в этом примере scanf("\n%d", &x);
вы даете scanf & x, который является адресом самого x.Это означает, что scanf изменит значение x, изменяя то, на что указывает x.Функция scanf хочет адрес туда, где она помещает свое значение.Таким образом, чтобы поместить его туда, куда указывает х, вам нужно просто ввести x .
Причина, по которой ваши значения совпадают, заключается в том, что вы просто передаете x вот так: bintest(x);
и печать y вот так: printf("%d", y);
.В этом примере y является просто копией x.
Если вы хотите проверить, как эти функции работают с указателями, попробуйте использовать этот код.В качестве примера я ввел 99.
#include <stdio.h>
#include <stdlib.h>
int bintest();
int main(){
int* x = malloc(sizeof(int));
printf("value of x: %d\n",x);
printf("address of x: %d\n",&x);
printf("value at %d: %d\n", x, *x);;
printf("\n\n*****\nEnter value of x\n*****\n");
scanf("\n%d", x);
printf("value of x: %d\n",x);
printf("address of x: %d\n",&x);
printf("value at %d: %d\n", x, *x);
bintest(x);
}
int bintest(int* y){
printf("\ny: %d", *y);
}
Вы должны получить вывод, подобный следующему:
value of x: 7018424
address of x: 6422316
value at 7018424: 7017768
*****
Enter value of x
*****
99
value of x: 7018424
address of x: 6422316
value at 7018424: 99
y: 99