scanf(%d,&a)和scanf(%d,a)区别

scanf(%d,&a)和scanf(%d,a)区别

首先写的都有问题,是scanf("%d",&a)和scanf("%d",a);
scanf输入%d格式是,要求参数是个整型的地址。所以a是int型的话,用&a就能写入a了。如果用a,则程序会把a的值作为一个地址,然后把输入的整数写到这个地址空间去了。所以容易崩溃。比如a=5,那么scanf会将输入的整数写到地址为0x00000005的空间,操作系统肯定不让你写啊,所以就崩溃啦

scanf(%d,&a)
&a取a的地址,然后将数放进这个地址中

scanf(%d,a) 如果a是一个数组,没问题。如果是 整数或者浮点数,错误,需要取地址

后面参数需要传的是地址,如果a是变量 那么需要&a; 如果a已经是指针变量了 就不需要加&

 
#include<stdio.h>
#include <stdlib.h>
int main()
{
    int a;
    int* b = (int*)malloc1(sizeof(int));
    scanf("%d %d",&a,b);
    printf("%d %d\n",a,*b);
    return 0;
}