指针变量前什么时候用*什么时候用&
发布网友
发布时间:2024-10-24 09:24
我来回答
共5个回答
热心网友
时间:2024-11-09 01:18
“*”表示这是个指针变量,也表示这个指针的地址上的内容
比如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
但由于是直接的指针操作,可能会被编译器判错
上面这些例子应该让你清楚什么时候用“*”什么时候用“&”了吧,希望对你有帮助。
热心网友
时间:2024-11-09 01:21
“*”表示这是个指针变量,也表示这个指针的地址上的内容
比如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;
不是说什么时候用哪个,你要先理解它们的意义才得。
热心网友
时间:2024-11-09 01:21
int j = 9;
int *i = &j;//定义指针i,并通过取地址符"&"赋值
*i=10;//这个时候通过*实际上*i与j是同一个变量。所以j的值为10;
不是说什么时候用哪个,你要先理解它们的意义才得。
热心网友
时间:2024-11-09 01:21
首先要正确使用指针变量要赋给指针一个可操作的地址,一下面的程序为例:
#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的值了。
另外建议你找一找相关的书籍仔细阅读,较系统的学习一下指针。
热心网友
时间:2024-11-09 01:19
int * pvar;
&pvar是取指针的地址。
*pvar是取指针指向的内容。