码迷,mamicode.com
首页 > 其他好文 > 详细

关于scanf函数中取地址的问题

时间:2015-05-24 15:26:42      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:

  这几天学了指针与地址之后,突发奇想。

 1 #include <stdio.h>
 2 int main()
 3 {
 4     int a,b,*pa,*pb;
 5     pa = &a;
 6     pb = &b;
 7     scanf("%d %d",pa,pb);
 8     printf("%d %d\n",a,b);
 9     return 0;
10 }

  既然scanf中&a与&b可以用指向它们地址的指针pa与pb来代替,那么是否可以通过查询变量a与b的地址,直接把a与b的地址写上来给a与b进行赋值呢?

  于是我就通过:

printf("&a=%p\n",&a);
printf("&b=%p\n",&b);

  来获得了a与b的地址,分别为&a=0028FF0C与&b=0028FF08。

  可是当我输入这样的代码的时候

scanf("%d %d",0028ff0C,0028FF08);

  编译器报错,编译无法通过。

  之后就一直在想,无论是&a还是pa,提供给编译器的的确是0028FF0C这样的一串数字啊,为什么我把它码出来就不行了呢?

  难不成其中涉及到一些编译原理的问题。

  之后我上网查scanf的函数原型,也没有找到相关答案能解决我的疑问。

  偶然间想起,地址是一串16进制的数字,而在大多数IDE中,默认你的数字是10进制的,而如果想要表达16进制的数字,则需要在数字前加上0x才行。

  于是我就把代码改成如下格式:

1 #include <stdio.h>
2 int main()
3 {
4     int a,b;
5     scanf("%d %d",0x0028FF0C,0x0028FF08);
6     printf("%d %d\n",a,b);
7     return 0;
8 }

  虽然编译器还是给出了一大串的warning,好在总算没有error,程序可以顺利运行,结果也和预期一致。

总结:

  scanf函数中,后面的地址表中,可以写直接对变量的取值(&a),也可以写存有该变量地址的指针(pa),也可以直接祭出变量的地址(0x0028FF0C)。

  注:直接写地址的话,16进制数中的英文字母无视大小写。

  

关于scanf函数中取地址的问题

标签:

原文地址:http://www.cnblogs.com/yoghurtman/p/4525774.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!