鱼C论坛

 找回密码
 立即注册
查看: 3700|回复: 12

指针问题

[复制链接]
发表于 2013-3-17 01:20:56 | 显示全部楼层 |阅读模式
10鱼币

int * q;
int a, b;
a = 11;
q = &a;
b = *q;
printf("a = %d  p = %d  b =%d\n", a, q, b);
printf("a = %d  p = %d  b =%d\n", a, *q, b);


在参数里 一个是q 一个是*q     
请问 我没有加*  q 输出是 a 的地址 还是一串垃圾值   - -我个人认为是a 的地址 求大神讲解

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-3-17 07:42:20 | 显示全部楼层
p就是一个地址,你用 %d 的形式输入 p 的值就是一个十进制的地址,如果%x输出p的值就是一个十六进制的值。 反正无论什么进制 p 就是地址。它是局部变量a在栈中的地址,一般形式就是0x12FF....
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-3-17 13:23:44 | 显示全部楼层
int * q;   //q为指针
int a, b;
a = 11;
q = &a;    //q赋值为a的地址
b = *q;    //b等于q地址里面的值,就是a
printf("a = %d  p = %d  b =%d\n", a, q, b);
printf("a = %d  p = %d  b =%d\n", a, *q, b);

可以论证如下:
代码:

  1. #include <stdio.h>

  2. void main()
  3. {
  4.         int * q;
  5.         int a, b;
  6.         a = 11;
  7.         q = &a;
  8.         b = *q;
  9.         printf("值 a = %d b =%d *q=%d\n", a, *q, b);
  10.         printf("地址a = %x  p = %x ",&a, q);

  11.         flushall();
  12.         getchar();

  13. }
复制代码
运行结果:
1.jpg

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-3-17 17:50:14 | 显示全部楼层
二楼正解{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-3-17 18:40:07 | 显示全部楼层
指针很麻烦,因为一个指针和两个类型有关:一个是它本身的类型,一个是它指向的类型。
比如:int * q = &a;
q本身的类型是指针,q指向的类型是int
相应地,对于指针变量求值也就有两种值,表达式q得到指针本身的值(就是地址);表达式*q得到指针指向元素的值,就是a的值。其它的自己再想想吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-3-17 19:04:16 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-3-18 00:16:56 | 显示全部楼层
顶二楼的回复
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-3-18 10:22:07 | 显示全部楼层
Black_Silence 发表于 2013-3-17 19:04
那 q 用%d 输出  那么输出的又是什么

地址的十进制输出啊。地址本身也是一个值,%x就是16进制形式输出,%d就是十进制输出。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-3-18 18:16:47 | 显示全部楼层
楼上大神正解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-3-18 23:52:00 | 显示全部楼层
int * q;            //声明一个指针q
int a, b;           //声明2个变量
a = 11;           //11赋值给变量A
q = &a;           //取出A的地址 赋值给指针q
b = *q;           //取出指针q保存的值 并赋值给b
printf("a = %d  p = %d  b =%d\n", a, q, b);  
printf("a = %d  p = %d  b =%d\n", a, *q, b);
// a=11  q的值是a的地址,b=11    *q=11
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-3-18 23:57:59 | 显示全部楼层
指针不要太纠结,指针也好,非指针也好,终归都是“变量"。 只是指针存放的值 是一个地址。这样是不是就好理解了。比如上面的 q=&a;。q是一个变量,&a是a的地址值。*q你可以看成*(&a),由于前面申明了int *q,所以*q应该是int (*(&a)); 希望能帮助你更好的理解指针
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-4-5 17:53:59 | 显示全部楼层
不懂觉厉 !  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-4-5 20:40:56 | 显示全部楼层
这么多大神回复,楼主应该懂了吧?我就不回答了哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-27 01:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表