简单的一句话概括:
*是取数据 , &是取地址
也可以理解为 &是引用 *是解引用
例子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 启用或关闭此功能即可
单精度和双精度的区别 float和double的区别float 单精度 占用4字节 有效数字范围:7位double 双精度 占8字节 有效数字范围15-16位区别就是占用内存的大小不同。和能表示的有效数字范围不同比如 3.14 有效数字就是3位 其实
自绘GDIplus基础:gdi和gdi+的区别、设备环境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 的