首页 > 其他分享 >3.指针和引用的区别

3.指针和引用的区别

时间:2023-07-03 21:26:54浏览次数:32  
标签:变量 指向 区别 int void 引用 指针

  • 指针是一个变量,存储的是一个地址,需要占用存储空间;引用本质上是一个常量指针,引用跟原来的变量实质上是同一个东西,是原变量的别名
  • 指针可以有多级,引用只有一级
  • 指针可以为空,引用不能为NULL(必须有具体实体)
  • 指针声明和定义可以分开,可以先只声明指针变量而不初始化,等用到时再指向具体变量。引用在定义时必须初始化,引用一旦初始化之后就不可以再改变(变量可以被引用为多次,但引用只能作为一个变量引用);指针变量可以重新指向别的变量。
  • sizeof指针得到的是本指针的大小,sizeof引用得到的是引用所指向变量的大小
  • 当把指针作为参数进行传递时,也是将实参的一个值拷贝传递给形参,两者指向的地址相同,但不是同一个变量,在函数中改变这个变量的指向不影响实参,而引用却可以。

参考代码:

void test(int *p)
{
  int a=1;
  p=&a;
  cout<<p<<" "<<*p<<endl;
}

int main(void)
{
    int *p=NULL;
    test(p);
    if(p==NULL)
    cout<<"指针p为NULL"<<endl;
    return 0;
}
//运行结果为:
//0x22ff44 1
//指针p为NULL
void testPTR(int* p) {
	int a = 12;
	p = &a;

}

void testREFF(int& p) {
	int a = 12;
	p = a;

}
void main()
{
	int a = 10;
	int* b = &a;
	testPTR(b);//改变指针指向,但是没改变指针的所指的内容
	cout << a << endl;// 10
	cout << *b << endl;// 10

	a = 10;
	testREFF(a);
	cout << a << endl;//12
}

参考资料来源:

阿秀

标签:变量,指向,区别,int,void,引用,指针
From: https://www.cnblogs.com/codemagiciant/p/17524074.html

相关文章

  • 5.堆和栈的区别
    申请方式不同。栈由系统自动分配。堆是自己申请和释放的。申请大小限制不同。栈顶和栈底是之前预设好的,栈是向栈底扩展,大小固定,可以通过ulimit-a查看,由ulimit-s修改。堆向高地址扩展,是不连续的内存区域,大小可以灵活调整。申请效率不同。栈由系统分配,速度快,不会有......
  • 7.区别以下指针类型?
    int*p[10]int(*p)[10]int*p(int)int(*p)(int)int*p[10]表示指针数组,强调数组概念,是一个数组变量,数组大小为10,数组内每个元素都是指向int类型的指针变量。int(*p)[10]表示数组指针,强调是指针,只有一个变量,是指针类型,不过指向的是一个int类型的数组,这个数组大小是10。i......
  • 10.malloc和new的区别?
    malloc和free是标准库函数,支持覆盖;new和delete是运算符,支持重载。malloc仅仅分配内存空间,free仅仅回收空间,不具备调用构造函数和析构函数功能,用malloc分配空间存储类的对象存在风险;new和delete除了分配回收功能外,还会调用构造函数和析构函数。malloc和free返回的是void类型指针......
  • 13.宏定义和函数有何区别?
    宏在预处理阶段完成替换,之后被替换的文本参与编译,相当于直接插入了代码,运行时不存在函数调用,执行起来更快;函数调用在运行时需要跳转到具体调用函数。宏定义属于在结构中插入代码,没有返回值;函数调用具有返回值。宏定义参数没有类型,不进行类型检查;函数参数具有类型,需要检查类型。......
  • 14.宏定义和typedef区别?
    宏主要用于定义常量及书写复杂的内容;typedef主要用于定义类型别名。宏替换发生在编译阶段之前,属于文本插入替换;typedef是编译的一部分。宏不检查类型;typedef会检查数据类型。宏不是语句,不在在最后加分号;typedef是语句,要加分号标识结束。注意对指针的操作,typedefchar*p_cha......
  • /etc/profile 和 ~/.bashrc的区别
    /etc/profile和~/.bashrc是两个不同的文件,它们在环境变量设置和启动脚本方面扮演着不同的角色。/etc/profile:/etc/profile是系统级别的配置文件,用于设置全局的环境变量和执行系统范围的初始化命令。当登录到系统时,会首先读取/etc/profile文件来加载系统的环境变......
  • flask run 和python xxx 两种方式的区别
    在Flask项目中,flaskrun和pythonxxx(其中xxx是Python文件名)是两种不同的方式来运行Flask应用程序。flaskrun:这是Flask提供的命令行工具,用于在开发环境中运行Flask应用程序。当你在项目目录下运行flaskrun命令时,Flask会自动检测应用程序的入口文件(通常是app......
  • Inno setup 脚本判断 Microsoft Visual C++ Redistributable 不同版本区别
    有个需要是需要在安装包安装初始化时安装MicrosoftVisualc++2013Redistributable也就是判断软件安装前需不需要运行vcredist_x64.exe和VC_redist.x64.exe这两个程序第一反应就是可以通过注册表判断是否已经安装过环境但测试发现需求的两个版本不同,注册表位置竟然也不......
  • 什么是SPI,和API有啥区别
    SPI代表服务提供者接口(ServiceProviderInterface),是一种Java编程语言的编程规范。它定义了一组接口或类的规范,供第三方开发人员实现,以向应用程序提供特定的服务或功能。SPI侧重于接口的定义和实现者的开发。API代表应用程序编程接口(ApplicationProgrammingInterface),是一组预定......
  • 指针模板
    下文所提到的函数的用法:birnary_search:查找某个元素是否出现,return值为boolbinary_search(beg,end,val)查找val,找到为1,否则为0;lower_bound:查找第一个>=某个元素的位置lower_bound(beg,end,val)返回一个迭代器,指向非递减序列中第一个>=val的位置upper_bound:查找第一个>......