请问C语言里面的指针里面的“*”和“&”用法怎么区别一下,各种混乱啊!谢谢!

GPU小码农 2013-10-06 11:32:37
比如定义一个函数 void Add(int * a){..}函数体里面用:a、*a、还是&a...各自作用是什么?C指针不过关啊。。
...全文
39329 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2013-10-08
  • 打赏
  • 举报
回复
在声明中和在语句中不一样。
zhao 2013-10-07
  • 打赏
  • 举报
回复
具体看你这个函数是要干什么了!调用时总归会是

int *b;
...;
add(&b);
在add函数内 a表示b的地址,只是个形参,调用过程中不会对原本b产生任何影响! *a表示b的值,对*a的修改直接反馈到b的值上面。 &a表示的是一个二级指针,存放的是a的地址也就是b的地址的地址,类型是int **,你这个函数估计是不会用到的!
一根烂笔头 2013-10-07
  • 打赏
  • 举报
回复
int a,int *a都是定义一个局部变量(一个整形,一个指针),它都局部于函数内部。函数结束自动灭亡。 int &a是C++中引用特性,即另一个变量的“别名”。 当外部调用函数,传递参数num(或者&num)时,那么 fun(int a) == a = num; fun(int *a)== a = # fun(int &a)== &a = num;
qqq123 2013-10-07
  • 打赏
  • 举报
回复 2
变量a 本质上代表一个存储单元。CPU通过该存储单元的地址访问该存储单元中的数据。所以a本来代表两个值:存储单元的地址和储单元中的数据。于是就有了二异性。为了消除这种二义性,C语言规定a表示存储单元中的数据,&a表示存储单元的地址。 a存储单元中的数据可以是一个普通数值,也可以是另一个存储单元的地址,比如:a = &b; 语句就是将b的存储单元的地址存入a存储单元中。C语言规定*a代表a中存储的地址对应的存储单元中的数据,也就是访问*a就等于访问b,于是*a提供了通过a访问b中的数据的手段。 a表示a对应的存储单元中的数据。 &a表示a对应的存储单元的地址。 *a表示:首先,要求a对应的存储单元中的数据一定是另一个存储单元的地址。 于是,*a表示另一个存储单元中的数据。 当a声明的类型是int时,a中存储的是一个整数数值,通过a可以访问(读取或修改)这个数值。 当a声明的类型是int*时,a中存储的是一个存储单元的地址,而该存储单元中存储的数据是一个整数数值;通过*a可以访问(读取或修改)这个数值。a == &*a 都是该存储单元的地址。 当a声明的类型是int**时,a中存储的是一个存储单元的地址,而该存储单元中存储的数据是另外一个存储单元的地址,另外这个存储单元中存储的是一个整数数值;通过**a可以访问(读取或修改)这个数值。 ... 最后,在C语言里地址叫指针。
max_min_ 2013-10-07
  • 打赏
  • 举报
回复
AnYidan 2013-10-07
  • 打赏
  • 举报
回复
找本语法书看看
whizer 2013-10-06
  • 打赏
  • 举报
回复

void Add(int * a)   // a 是一个int型的指针,a指的地址存放的是int型的数据
{
  a    // 取指针a的值(即地址)
  *a   // 取指针a指向的内容
  &a   // 取存放指针a的值的地址
}
lm_whales 2013-10-06
  • 打赏
  • 举报
回复
a、*a、还是&a 对于声明或定义int * a; a 是一个指针,存放一个地址,a的值就是这个地址。 *a 是指针a,所存放的地址中存放的数据。 &a 指针也是数据的一种,而且它也有个地址,&a就是这个地址。 一切需要存放的数据,都有地址。 一般我们 都只考虑,变量的地址,而不考虑常量的地址; 因为常量,要么没有地址,要么像变量一样,也有一个地址, 这种有地址的常量,当作变量看待就可以了。
猫仔- 2013-10-06
  • 打赏
  • 举报
回复
*a代表类型指针,a代表某类型的变量,&a代表某类型的变量的引用 *a 是指向某个地址,字节都是4 , a表示复制一个变量的值,字节与要复制的变量的字节一样大,&a表示引用某一个变量字节与类型有关!

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧