| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 913 人关注过本帖
标题:C语言数行代码中 关于使用地址符”&“和”*“的疑问
只看楼主 加入收藏
迪拜
Rank: 2
等 级:论坛游民
威 望:1
帖 子:43
专家分:17
注 册:2012-9-23
结帖率:92.86%
收藏
已结贴  问题点数:10 回复次数:12 
C语言数行代码中 关于使用地址符”&“和”*“的疑问
如下代码:  请问这两个有什么区别呢 ,在应用中,哪个用的比较多

可不可以这么说:
1) 定义变量时加*表示声明指针,运算时*表示根据指针取值,&表示取变量的地址。
2) “&”是根据变量取地址,而“*”是直接根据地址找变量
3)在大的数据量操作中,“*”运算更快,使用更多,”&“仅限于取首地址,使用范围很小。


程序代码:
#include "stdafx.h"
int main(int argc, char* argv[])
{
    int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

    printf("*a=\t\t%x\n",*a);
   
    printf("&a=\t\t%x\n",&a); 
    
    return 0;
}


[ 本帖最后由 迪拜 于 2015-4-23 17:01 编辑 ]
搜索更多相关主题的帖子: C语言 
2015-04-23 15:30
z_j_j_1
Rank: 4
等 级:业余侠客
威 望:1
帖 子:62
专家分:213
注 册:2015-4-4
收藏
得分:1 
回复 楼主 迪拜
C语言数行代码中 关于使用地址符”&“和”*“的疑问
如下代码:  请问这两个有什么区别呢 ,在应用中,哪个用的比较多
答:这两个各有各的用途。项目中用的都挺多的。

可不可以这么说:
1) 定义变量时加*表示声明指针,运算时*表示根据指针取值,&表示取变量的地址。
答:对的
2) 在大的数据量操作中,“&”是根据变量取地址,而“*”是直接根据地址找变量
答:可以这么解释
3)“*”运算更快,使用更多,”&“仅限于取首地址,使用范围很小。
答:这么说是不对的,这两个使用的都挺多的。
2015-04-23 16:47
迪拜
Rank: 2
等 级:论坛游民
威 望:1
帖 子:43
专家分:17
注 册:2012-9-23
收藏
得分:0 
回复 2楼 z_j_j_1
能否 给予更多的解释 或者网站链接也行
2015-04-23 16:57
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
似是而非的理解

授人以渔,不授人以鱼。
2015-04-23 22:41
迪拜
Rank: 2
等 级:论坛游民
威 望:1
帖 子:43
专家分:17
注 册:2012-9-23
收藏
得分:0 
回复 4楼 TonyDeng
求解答或者解答的链接
2015-04-24 13:51
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:1 
回复 5楼 迪拜
书上,基础的运算符

总有那身价贱的人给作业贴回复完整的代码
2015-04-24 14:05
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:2 
其他的我没看,只是关于*运算更快是什么意思?根据你的描述,是不是说*比&快?
不会吧,在汇编里*只是相当于间址寻址,cpu需要先取出地址放在地址总线上,再根据这个地址找到该地址里的内容赋值给需要的寄存器或再由寄存器赋值到另一个变量地址;而&是相当于把一个立即数(指针也是一个32位数)赋值给寄存器或一个指针变量。立即数赋值绝对比间址寻址赋值快。

[ 本帖最后由 wmf2014 于 2015-4-24 15:29 编辑 ]

能编个毛线衣吗?
2015-04-24 14:24
迪拜
Rank: 2
等 级:论坛游民
威 望:1
帖 子:43
专家分:17
注 册:2012-9-23
收藏
得分:0 
回复 7楼 wmf2014
你讲的好高深  不懂 就是想知道*和&的区别和联系
2015-04-24 14:43
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:2 
很简单的概念,没有什么专门的教案,那只会越弄越复杂。

指针不过是一种存取数据的手段,而且是间接的寻址操作。你上面的问题,关键是搞错了指针的声明,像int *p这类的声明格式,其实有误导性,最好的写法是int* p,即*号紧贴在数据类型后面,表示变量p是一个指针、其所指向的对象是一个int型数据。你的错误,是被int *p的形式误导,觉得*p组合是一个int变量,虽然在指针的使用期,解引用*p确实是表示一个int变量,但那是在使用期的动作,与声明时的格式是两回事。在《C++ Primer》中,有详细讨论上述指针声明两种格式的问题,结论是各有特点,没有对错,但最好选定一种作为自己的方案——我的倾向是*号紧贴类型,但C程序员大多数用另一种。如何选择,你自己决定了,那真的影响理解,结果就是你现在的问题。

授人以渔,不授人以鱼。
2015-04-24 23:26
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:2 
&是取一个变量的地址。其实没有什么“首地址”,那只是程序员处理数据时的一种理解,你认为一段或一块内存,从哪开始作为入口,都是可以的,于是你会用简单的说法叫那个入口地址是首地址。我的语言习惯,是不用首地址这样的称呼,我一向说入口地址。

授人以渔,不授人以鱼。
2015-04-24 23:29
快速回复:C语言数行代码中 关于使用地址符”&“和”*“的疑问
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026498 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved