飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 5207|回复: 2

[C/C++] 关于指针变量的赋值,问个问题

[复制链接]

该用户从未签到

发表于 2009-7-16 23:19:19 | 显示全部楼层 |阅读模式
第一段
main()
{
int a=2,*p=&a,*q=&a;
printf("%d   %d\n",*p++,*(q++));
p=&a; q=&a;
printf("%d   %d\n",*p,(*q)++);
}

第二段
main()
{
int a=2,*p,*q;
q=p=&a;

printf("%d   %d\n",*p++,*(q++));
p=&a; q=&a;
printf("%d   %d\n",*p,(*q)++);
}

以上二段红色代码有区别,程序运行结果一样,
但谭教授的书上说不能写成:*p=&a,因为a的地址是赋给指针变量p,而不是赋给*p(即变量a)。
*p不是应该=a吗?怎么变成了*p=&a(a的地址也是正确的了?)我实在是搞糊涂了,那位能解下疑啊。。。谢谢了。。。

p是指针变量,指向a的地址,所以p=&a;
*p是指针变量p所指向的地址中的数值,所以*p=a;
但是为什么*p=&a,也不是错的?

[ 本帖最后由 widelove 于 2009-7-17 00:03 编辑 ]
PYG19周年生日快乐!

该用户从未签到

 楼主| 发表于 2009-7-17 00:10:04 | 显示全部楼层
int a=2,*p=&a,*q=&a;

int a=2;
int *p;
int *q;
p = q = &a;
的缩写

准确说是
int a=2;
int *p=&a;
int *q=&a;
的缩写

int* p = &a;
int*是修饰p的。表名p是一个指向int型的指针类型
p这个变量存放的是a变量的地址

照这样是不是可以理解成:
定义的时候*号是用作定义符的
在语句中的*号是指针运算符。







  A
PYG19周年生日快乐!
  • TA的每日心情
    擦汗
    2017-9-24 22:49
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    发表于 2009-7-17 08:27:23 | 显示全部楼层
    定义 PK 赋值
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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