免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 12380 | 回复: 62
打印 上一主题 下一主题

[C] 关于指针的地址运算符&(新手请教) [复制链接]

论坛徽章:
1
白羊座
日期:2014-03-22 18:23:03
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-12-14 16:41 |只看该作者 |倒序浏览
今天看到这么一段,说,一元运算符&可用于取一个对象的地址,因此,下面的语句:
  1. p = &c;
复制代码
将把c的地址赋值给变量p,我们称p为“指向” c 的指针。
下面这句话:地址运算符&只能应用于内存中的对象,即变量与数组元素。它不能作用与表达式、常量或register类型的变量。恩。。。我想知道为什么 - -。。。额。。。感觉是不是会牵扯到存储器的问题= =。。有木有同学可以说一下你的看法。。。。谢谢了。。。)



(另外= =。。我有个毛病。。就是问题太细。晕。。不知道有木有大神可以解释一下地址运算符&的印刷体为什么少了一点= =。。噗。。这个不是重点。。上面的问题。。希望版友可以回答一下。。。谢谢= =)

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
2 [报告]
发表于 2012-12-14 17:18 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
3 [报告]
发表于 2012-12-14 17:21 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
4 [报告]
发表于 2012-12-14 17:45 |只看该作者
本帖最后由 lxyscls_cu 于 2012-12-14 17:52 编辑
pmerofc 发表于 2012-12-14 17:18
回复 1# _HellAngel_
  1.         .file        "point.c"
  2.         .text
  3. .globl point
  4.         .type        point, @function
  5. point:
  6.         pushl        %ebp
  7.         movl        %esp, %ebp
  8.         subl        $16, %esp
  9.         movl        $0, -8(%ebp) <- c = 0;
  10.         leal        -8(%ebp), %eax <- &c;
  11.         movl        %eax, -4(%ebp) <- p = &c;
  12.         leave
  13.         ret
  14.         .size        point, .-point
  15. .globl main
  16.         .type        main, @function
  17. main:
  18.         leal        4(%esp), %ecx
  19.         andl        $-16, %esp
  20.         pushl        -4(%ecx)
  21.         pushl        %ebp
  22.         movl        %esp, %ebp
  23.         pushl        %ecx
  24.         call        point
  25.         movl        $0, %eax
  26.         popl        %ecx
  27.         popl        %ebp
  28.         leal        -4(%ecx), %esp
  29.         ret
  30.         .size        main, .-main
  31.         .ident        "GCC: (GNU) 4.1.1 20061011 (Red Hat 4.1.1-30)"
  32.         .section        .note.GNU-stack,"",@progbits
复制代码
  1. void point(void)
  2. {
  3.         int c = 0;
  4.         int *p = &c;
  5. }

  6. int main(void)
  7. {
  8.         point();

  9.         return 0;
  10. }
复制代码
这个不就是地址么?{:3_189:}
您这给我凭空多了一个指针变量的感觉

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
5 [报告]
发表于 2012-12-14 18:46 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
6 [报告]
发表于 2012-12-14 19:11 |只看该作者
本帖最后由 幻の上帝 于 2012-12-14 19:14 编辑

&c是指向c的指针值,表示地址,不是地址。
&要求操作数是左值。常量不是左值,当然用不了。不能作用于register变量是附加限制:如果能取register对象的指针,那么它和主存里的对象就没多大区别了,register就没什么意义了——一般寄存器不和主存共享地址空间。

论坛徽章:
0
7 [报告]
发表于 2012-12-14 19:13 |只看该作者
pmerofc 发表于 2012-12-14 17:21
回复 1# _HellAngel_

寄存器也可以算内存。尽管更多时候“内存”一般是指作为主存的RAM,这里区分一下比较好。

论坛徽章:
1
白羊座
日期:2014-03-22 18:23:03
8 [报告]
发表于 2012-12-14 20:14 |只看该作者
本帖最后由 _HellAngel_ 于 2012-12-14 20:27 编辑

回复 3# pmerofc


额。。大神。。。那。。我想知道。。= =。。额。。作用于表达式。。。您可不可以给我举个例子。。额。。 我不是很懂= =

论坛徽章:
3
寅虎
日期:2013-11-27 07:53:29申猴
日期:2014-09-12 09:24:152015年迎新春徽章
日期:2015-03-04 09:48:31
9 [报告]
发表于 2012-12-14 20:26 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
10 [报告]
发表于 2012-12-14 20:27 |只看该作者
_HellAngel_ 发表于 2012-12-14 20:14
回复 3# pmerofc

?号表达式{:3_189:}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP