在C中使用指针时没有得到变量的指定值

时间:2016-12-24 18:19:11

标签: c pointers char printf

#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

3 个答案:

答案 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