指针变量前什么时候用*什么时候用&

 我来答
garjarst
2012-02-07 · TA获得超过140个赞
知道答主
回答量:55
采纳率:0%
帮助的人:37万
展开全部
“*”表示这是个指针变量,也表示这个指针的地址上的内容
比如int *i;
表示i是指针,其中int *可以作为一个整体,比如(int *)0x214FF835,把0x214FF835直接强制转换为存放int的地址。
“&”表示引用当前变量地址。
比如
int i=14;\\假设i的地址为0x214FF835;
printf ("%d",i);\\输出结果:14
printf ("%x",&i);\\输出结果:214ff835
同时引用指针指向的内容还有一个方法
比如
int *i;
i=(int *)malloc (sizeof (int));\\分配内存并把内存地址放入指针
i[0]=100;\\下标引用,当成数组使用
printf ("%d",*i);\\输出结果:100
同时函数由于只有一个返回值,因此采用传递地址参数为多数人所用
比如
int myfunc (int *a,int *b);\\表示这两个是指针变量
传递时就直接引用变量地址
比如
int i,j;
myfunc (&i,&j);\\到时函数里就可以直接对i和j进行修改,无须返回,这里的&i和&j表示只传递了i和j的地址,因此任myfunc杀和剐
最后再附带介绍变参法(变参指函数参数数量不固定,比如常用的scnaf和printf就是典型的变参)
比如
int newfunc (int a,...);\\到时利用a来获取参数
main ()
{
int i,j,k,l,m,n;
newfunc (i,j,k,l,m,n);
return 0;
}
这时newfunc可以用&a[x]来调用剩下的参数,但记住入参方向
这里的&a[x]中&a表示引用了当前位置,由于入参时参数是放在一起的(因此变参不要用fastcall等入参法),剩下的x表示a的地址偏移(单向),如果意图向另一边偏移,可以直接用指针加减
比如
&a++;\\表示存放a的地址加上sizeof (int)*1,因为a是int指针
&a--;\\表示存放a的地址减去sizeof (int)*1
但由于是直接的指针操作,可能会被编译器判错
上面这些例子应该让你清楚什么时候用“*”什么时候用“&”了吧,希望对你有帮助。
合同法地图
推荐于2018-05-18 · TA获得超过156个赞
知道答主
回答量:67
采纳率:100%
帮助的人:16.9万
展开全部
“*”表示这是个指针变量,也表示这个指针的地址上的内容
比如int *i;
表示i是指针,其中int *可以作为一个整体,比如(int *)0x214FF835,把0x214FF835直接强制转换为存放int的地址。
“&”表示引用当前变量地址。
比如
int i=14;\\假设i的地址为0x214FF835;
printf ("%d",i);\\输出结果:14
printf ("%x",&i);\\输出结果:214ff835
同时引用指针指向的内容还有一个方法
比如
int *i;
i=(int *)malloc (sizeof (int));\\分配内存并把内存地址放入指针
i[0]=100;\\下标引用,当成数组使用
printf ("%d",*i);\\输出结果:100
同时函数由于只有一个返回值,因此采用传递地址参数为多数人所用
比如
int myfunc (int *a,int *b);\\表示这两个是指针变量
传递时就直接引用变量地址
比如
int i,j;
myfunc (&i,&j);\\到时函数里就可以直接对i和j进行修改,无须返回,这里的&i和&j表示只传递了i和j的地址,因此任myfunc杀和剐
最后再附带介绍变参法(变参指函数参数数量不固定,比如常用的scnaf和printf就是典型的变参)
比如
int newfunc (int a,...);\\到时利用a来获取参数
main ()
{
int i,j,k,l,m,n;
newfunc (i,j,k,l,m,n);
return 0;
}
这时newfunc可以用&a[x]来调用剩下的参数,但记住入参方向
这里的&a[x]中&a表示引用了当前位置,由于入参时参数是放在一起的(因此变参不要用fastcall等入参法),剩下的x表示a的地址偏移(单向),如果意图向另一边偏移,可以直接用指针加减
比如
&a++;\\表示存放a的地址加上sizeof (int)*1,因为a是int指针
&a--;\\表示存放a的地址减去sizeof (int)*1
但由于是直接的指针操作,可能会被编译器判错
上面这些例子应该让你清楚什么时候用“*”什么时候用“&”了吧,希望对你有帮助。

int j = 9;
int *i = &j;//定义指针i,并通过取地址符"&"赋值
*i=10;//这个时候通过*实际上*i与j是同一个变量。所以j的值为10;
不是说什么时候用哪个,你要先理解它们的意义才得。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Mr_Yang2012
2012-02-07 · TA获得超过1647个赞
知道小有建树答主
回答量:392
采纳率:0%
帮助的人:494万
展开全部
首先要正确使用指针变量要赋给指针一个可操作的地址,一下面的程序为例:
#include<iostream>
using namespace std;
int main(){
int*i_pointer; //定义一个指向整型数据的指针i_pointer
int i=3; //定义整型数据i并初始化
i_pointer=&i; //将i在内存中的地址赋给i_pointer
cout<< *i_pointer<<endl; //输出在i_pointer中存放地址中的值
system("pause");}
定义指针变的形式 : 数据类型*指针变量名;
&在这里是取址运算符,作用是获取一个已经定义的量地址,注意指针中存放的是一个地址!
例如:i_pointer=&i; 获取i的地址并赋给指针
*i_pointer就代表了在i_pointer中存放的地址中存放的值
由于将i的地址赋给了i_pointer,所以*i_pointer输出的值就是i的值了。
另外建议你找一找相关的书籍仔细阅读,较系统的学习一下指针。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ssjmhyvi
2012-02-07 · TA获得超过592个赞
知道小有建树答主
回答量:310
采纳率:0%
帮助的人:293万
展开全部
int j = 9;
int *i = &j;//定义指针i,并通过取地址符"&"赋值
*i=10;//这个时候通过*实际上*i与j是同一个变量。所以j的值为10;
不是说什么时候用哪个,你要先理解它们的意义才得。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
大漠弯刀_Aspen
2012-02-09
知道答主
回答量:2
采纳率:0%
帮助的人:2175
展开全部
int * pvar;
&pvar是取指针的地址。
*pvar是取指针指向的内容。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式