*(指针变量?取内容运算符?),&(引用?取地址运算符?),**(指向指针的指针?),*&(指针引用?)(简单易懂,比书上写的更容易理解)

#include <stdio.h>

#include <stdlib.h>

int main()

{

int b=2;

int *a=&b;

/*

int *定义了a,a是指针变量,存放的永远是地址,定义了一个整形指针类型的变量a,指向了整形变量b的地址

//*的作用有两个,这里*的作用是声明指针

//而&的作用是也是两个,引用,获取变量的地址。

//int &a=*b;此时&在左边,是引用b,int a=&b;此时&在右边,是获取地址

*a=5;

//这里的*是另外一个作用,取内容运算符,即解引用,将5替换原来b的地址的值(即3)

//此时注意指针指向地址是变量b的地址,变量b的地址存放的值变成5(原来是2),则b的值也就变成5了。

//如果a=5会怎样,会报错。a=5是错误的是因为a是一个指针变量,指向的是一个地址,而5不是一个地址,除非你提前知道存放b的地址

取内容运算符改变了a存放地址指向的值,但是并未改变创建变量b时开辟空间的地址。测试发现只有新建另外一个指针变量才会改变这个指针变量的地址,至于为什么创建另外一个指针变量会改变这个指针变量的地址,欢迎大佬来补充

*/

printf("%d\n",*a);

//*作用为取内容运算符,获得指针变量a存放的地址里的内容。即5。

printf("%d\n",a);//输出a的地址,指针变量a永远输出地址

a=6422036;

//输出a的地址后知道了a的地址,copy来

printf("%d\n",*a);

//在输出*a,输出结果为2(b为2)。

int **c=&a;

//此时定义的也是一个指针变量 *c,*c存放的是创建指针变量a开辟空间时的地址

printf("%d\n",c);

/*

c存放的是创建指针变量*c开辟空间时的地址。即本身的地址,可等价于int c;int *c=&c.个人理解可能不对,欢迎思索后纠正

*/

printf("%d\n",*c);//*c存放的是指针变量a的地址

printf("%d",**c);

/*

*解引用,即输出*c里的内容,即输出指针变量a的地址(存放的是变量b的地址)的值

*/

/*

而*&属于c++里面的指针引用,关于指针引用,网上找半天也没找到太好的解释,欢迎各位补充

//指针,此时是无效的

void test1(Point *p)

{

p = new Point();

p->x = 100;

}

//指针引用,此时是有效的

void test2(Point *&p)

{

p = new Point();

p->x = 100;

}

*/

return 0;

}

上述代码的结果输出如下(耐心对照看下,会理解更透彻):

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值