C++面试高频(指针与引用)

指针与引用

1 引用和指针的区别⭐⭐⭐⭐⭐

(1)指针是实体,占用内存空间;引用是别名,与变量共享内存空间

(2)指针不用初始化或初始化为NULL;引用定义时必须初始化

(3)指针中途可以修改指向;引用不可以

(4)指针可以为NULL;引用不能为空

(5)sizeof(指针)计算的是指针本身的大小;而sizeof(引用)计算的是它引用的对象的大小

(6)如果返回的是动态分配的内存或对象,必须使用指针,使用引用会产生内存泄漏

(7)指针使用时需要解引用;引用使用时不需要解引用‘*’。

(8)有二级指针;没有二级引用。

2 指针⭐⭐⭐⭐⭐

数组指针和指针数组的区别

数组指针和指针数组是两种常用的C语言指针类型,它们的区别如下:

定义方式不同:数组指针是一个指向数组的指针,定义方式为:类型 (*指针变量名)[数组长度];而指针数组是一个数组,数组中每个元素都是指针,定义方式为:类型 *指针数组名[数组长度]

存储的数据不同:数组指针存储的是整个数组的地址,而指针数组则存储的是多个指针变量的地址,每个指针变量又可以指向另一数据区域的地址。

操作方式不同:对于数组指针,通常需要使用解引用运算符和下标运算符[]来访问数组中的元素。而对于指针数组,可以通过下标运算符来访问特定的指针变量,然后使用解引用运算符来访问该指针所指向的数据。

分配空间方式不同:对于数组指针,必须先定义数组并为其分配内存空间,才能将其指针传递给数组指针变量。而对于指针数组,可以直接定义并初始化一个数组中的指针变量。

在实际编程中,如何选择数组指针或指针数组取决于具体问题的实现需要以及代码的简洁性等因素。如果需要动态地处理数组元素,应该使用指针数组;如果需要传递整个数组,并使函数能够更改数组元素的值,则应该使用数组指针。

函数指针和指针函数的区别

函数指针和指针函数是两个非常常见的C语言概念,它们的区别如下:

定义和声明方式不同:函数指针是指向函数的指针,需要先定义函数类型,再声明函数指针,定义方式为:返回类型 (*指针名)(参数列表);而指针函数是返回值为指针类型的函数,定义方式为:返回类型 *函数名(参数列表)

存储的数据不同:函数指针存储的是函数的地址,可以通过它来调用该函数;而指针函数返回的是指针类型的数据,可以通过该数据来访问其他数据。

调用方式不同:函数指针可以通过使用解引用运算符*和函数调用运算符()来调用它所指向的函数;而指针函数只需要按照普通函数的调用方式来调用即可。

使用场景不同函数指针常常用于回调函数和动态库中函数的加载等场景,可以更灵活地实现不同的函数调用;而指针函数则适用于需要返回复杂数据类型的函数,例如返回一个指向数据结构的指针。

总之,函数指针和指针函数虽然都涉及到指针的使用,但是它们的应用场景、定义方式、存储的数据和调用方式等具有较大的差异,需要根据实际编程需求选择使用

指针和数组名的区别和联系

指针和数组名是C语言中的两个重要概念,它们在以下方面有联系和区别:

定义方式:数组名表示的是一个数组的名称,它是一个常量指针,即一个不可更改的地址常量,而指针是一个变量,可以被赋新值来指向内存中的不同位置

数据存储:数组名是一个常量指针,表示的是该数组的首地址,指向整个数组;而指针则是一种变量类型,存储的是指向的数据的地址,指向一个单独的数据

访问方式数组名和指针都可以用于数组的访问。数组名在访问数组时,采用下标的方式(如:arr[2]),指针在访问数组时,需要先将指针指向该数组首地址后,再使用相似的下标方式去访问该数组元素(如:*(p+2))。

操作方式:指针可以像普通变量一样进行赋值、递增、递减等操作;而数组名是一个常量指针,只能用来表示该数组的首地址,不可以进行赋值、递增、递减等操作。

传递方式:将数组名作为函数参数时,传递的是该数组的首地址,而指针则可以作为函数参数来传递指向不同数据类型的数据

指针常量和常量指针有何区别⭐⭐⭐⭐

指针常量(Pointer to a constant):指针常量是指指针本身是不可更改的,即指针变量自身的值不能被修改,但指向的值可以修改。声明指针常量时,需要在指针类型前加上 const 修饰符。例如:

int* const ptr;  // ptr 是指向常量的指针,指向的值不能通过 ptr 修改,但可以通过其它方式修改

在这个例子中,ptr 是一个指向 int 类型常量的指针,它的值不能被修改,但可以通过其他途径修改指向的值。

常量指针(Constant pointer):常量指针是指指针指向的地址不能更改,即指针变量指向的地址不能被修改,但可以通过指针修改指向的值。常量指针在声明时需要使用 const 修饰符将指针指向的类型声明为常量。例如:

int x = 5;
 const int * ptr = &x;  // ptr 是常量指针,指向的地址不能通过 ptr 修改,但可以通过 *ptr 修改值

ptr是常量

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

嵌入式/C++面试八股文 文章被收录于专栏

#承诺提供免费技术答疑# 本专栏主要是介绍嵌入式开发岗位相关知识和学习攻略。“C/C++软件开发岗位”也可以参考。 该专栏覆盖了嵌入式求职过程中99%常见面试题,详细讲解了嵌入式软件开发岗位、学习攻略、项目经验分享、面试心得,从技术面,HR面,主管面,谈薪一站式服务。订阅即赠送简历模板、内推机会,需要的同学点击我头像私信即可!

全部评论
指针常量和常量指针那块儿应该错了https://blog.csdn.net/weibo_dm/article/details/80445205 指针是常量,常量的指针
点赞 回复 分享
发布于 08-20 21:10 河北

相关推荐

评论
1
8
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务