为什么这里输出的是&i的值而不是我给的常量i的值。

来源:百度知道 编辑:UC知道 时间:2024/05/25 04:34:48
#include <stdio.h>
main()
{ long i=23;
printf("input a number:");
scanf("%ld", &i);
printf("%ld\n",i);
}
为什么这里输出的是&i的值而不是我给的常量i的值,比如说输入5641,输出的就是5641而不是23??? &i不是变量的地址吗?
如果在scanf里改变了i的值,&i代表的也是变量地址阿,为什么输出的不是这个变量地址代表的值,而直接就是地址的内容呢??麻烦你们给我解释一下好吗??万分感谢!!

scanf("%ld", &i);函数是将I/O缓存中的数据按照第一个参数的格式,放到第二个参数那个地址里面。所以scanf("%ld", &i);不是修改了i的地址,是修改了i地址里的内容。楼主好像对scanf函数的意思有点误解。

scanf("%ld", &i);
将输入终端得到的值放到i的地址,自然改变了i的值.

换个角度理解:
int i = 23;
int *pi = &i;

*pi = 5641;
这句将5641的值放到pi所指的地址去,也就是5641送给了i.

scanf("%ld", &i);

因为这一句将i值重新赋为5641,所以下面的printf()函数会输出新值!

long i=23; 这里只是对i进行了初始化,scanf("%ld", &i);这里对i重新赋值了,当然不是原来的值了

&i是变量i的地址没有错。&i是取变量i的地址。
scanf("%ld", &i);这句的意思是从外界输入一个数存放到变量i中。
详细点就是 &i先取得变量i的地址,然后再根据这个地址找到变量i,再存放到i里面。
如果你想输出&i这个变量的地址,你可以使用这个语句
printf("%d\n",&i);

修改了原来i所在地址的内容,i的值显然就变了