简单的一句话概括:

*是取数据 , &是取地址

也可以理解为 &是引用 *是解引用


例子1:解引用

a=10;

p=&a     把a的地址取出来,赋值给p,p等于一个地址

* p=1000   p这个地址(p是个地址)里写入数据 1000

// p=1000 是往存放变量p的地址 里写如数据1000

区别在于   一个是  p本身是个地址   一个是存放变量p的地址

                一个是 p 是个地址         一个是p是个变量   


例子2:引用

//引用:相当于给变量起别名

    int a = 1

    int &b = a;

   //这时, 操作 变量b, 就是操作的变量a的地址, 变量a的值也会跟着改变,

// 引用在  传递参数的应用

 

        /*定义函数*/

       void 函数名(int c){

           输出 c

        }

       /*调用函数*/

       int a = 1;

       函数名(a)

/*

当调用上面函数时, 就相当于在函数体内  定义了一个   参数一 = a

所以  当定义函数时  写成   函数名(&c){} ,

就相当于在函数体内写了一个    &c = a

此时,相当于给a变量起了一个别名:c

改变c的值,a也会改变

相当于只是传递了一个a的地址.

*/

 

int a = 10;

int &ref = a; /*定义一个引用,相当于给变量a起了一个别名:ref

              编译器内部会转换成:

              int* const ref = &a

              */

 

ref = 20;//内部发现ref是引用,自动帮我们转换成: *ref = 20

还有一个关键,在C语言中字符串常量的本质表示其实是一个地址,这是许多初学者比较难理解的问题。。

例如:

char * p="hello";

为什么可以把一个字符串赋值给一个指针变量?这不是类型不一致吗?

实际上  hello虽然我们看起来是一个字符串  但是编译器看他 就是一个地址,而且是首地址

也就是说   char * p ="hello"   的意思是    把储存 hello 的首地址  赋值给 p 

即字符串常量的本质表现是代表它的第一个字符的地址。。。。。。。。。

搞清楚这个问题。。

 那么 %s ,它的原理其实也是通过字符串首地址输出字符串,

printf("%s ", p);  

printf("%s ","hello");  

传给它的其实是s所保存的字符串的地址。。。


指针的用法: http://qingzhouquanzi.com/225.html

&引用的用法:http://qingzhouquanzi.com/264.html

相关推荐

c++的引用,参数传递地址,&符的使

//引用定义:相当于给变量起别名 int a = 1 int &b = a; //这时, 操作 变量b时, 就是操作的变量a的地址, 变量a的值也会跟着改变,// 引用做函数的参数

c++定义struct与class的区别 和初始值设置

类的创建#include<iostream> using namespace std; #include <string> class 学生类{ public:

c++ 中 char与wchar_t的区别 windows中apI函数后面带a和W的区别

C++基本数据类型中表示字符的有两种: char、wchar_t。char叫多字节字符,一个char占1个字节,之所以叫多字节字符是因为它表示一个英文字符时是一个字节,而中文字符时是多个字节。wcha

易语言写多线程程序 0x xxxxx 指令引用的0xxxxxxx内容 该内存不能为read

被这个问题困扰了两天由于代码太多 经过检查也没有操作全局变量 只能每一个步骤都记录一个日志来观察最终 原来是在子线程里 使用 正则表达式造成的可能这次写的线程数太多了 200个线程并发 鬼知道正则表达

Visual Studio里 1个引用 几个引用 VS

在工具 >> 选项 >> 文本编辑器 >> 所有语言 >> CodeLens 启用或关闭此功能即可

单精度双精度的区别 floatdouble的区别

float 单精度 占用4字节 有效数字范围:7位double 双精度 占8字节 有效数字范围15-16位区别就是占用内存的大小不同。和能表示的有效数字范围不同比如 3.14 有效数字就是3位 其实

自绘GDIplus基础:gdigdi+的区别、设备环境Dc的概念、以及对象使方法

gdi和gdi+的区别1.GDI是gdi32.dll这个库,而GDI+是GDIplus.dll这个库2.GDI是硬件加速的,而GDI+不是3.GDI是有状态的,而GDI+是无状态的4.GDI绘图要使用

css定位:相对定位、绝对定位、固定定位的区别与特性

css定位常用的有以下三种:使用了定位的共同特性:这三种定位可以设置四个值,但是通常只用到2个值就可以完成定位如果只写了定位 没有设置偏移量,则元素位置都不会改变,默认值为原来的位置.使用了定位,.元

mysql效率研究(二):char(20) 和 char(40) varchar(255)varchar(256)varchar(50)varchar(100) 的区别

/*varchar(255)和varchar(256) 和 varchar(50)和varchar(100) 的区别*/ $sql="create table char20(

Visual Studio版本区别 community(社版)、professional(专业版)、Enterprise(企业版)

Community(社区版)也可以理解为个人版。适用于学生、开源和个人。一些新手用来学习是个不错的选择。该版本有相对完备的免费IDE。可用于开发 Android、iOS、Windows 和 Web 的