#include<stdio.h>
int main()
{
int a;
char c;
int *A=&a;
char *C=&c;
printf("Enter the value of a,c\n");
scanf("%d,%d",&a,&c);
printf ("Adress of a,c= %d,%d\n",A,C);
printf("value of a,c= %d %d\n",a,c);
return 0;
}
输出为:
C:\ Users \用户阿维纳什\桌面和GT; A.EXE
输入a,c
的值12,40
a的地址,c = 6356740,6356739
a的值,c = 0,40
答案 0 :(得分:1)
正如其他人所说,错误在于scanf()格式表达式&#39;%d&#39;用于阅读角色c。发生的事情是这样的:注意c的地址比a的地址低一个(这对于堆栈上的变量是预期的)。假设一个字符占用一个字节,一个整数占用4个字节。使用&#39;%d&#39;你告诉scanf()第二个指针指向一个整数;因此,它将第二个值读作整数, - 用零填充高位,并在四个字节中存储值 - 基于c的地址。填充覆盖a的低位,解释了printf()将其值显示为0的原因。
答案 1 :(得分:0)
%c
用于扫描char
。变化
scanf("%d,%d",&a,&c);
到
scanf("%d,%c",&a,&c); //make sure there is only single comma in between the inputs. Nothing else, nothing more.
答案 2 :(得分:0)
你有一些scanf格式和printf格式的问题
int a;
char c;
int *A = &a;
char *C = &c;
printf("Enter the value of a,c\n");
scanf("%d, %c", &a, &c); //%c for reading chars
printf("Adress of a= %p, c= %p\n", A, C); // printing the address %p
printf("value of a= %d c= %c\n", a, c); //%c for printing chars