1、 左值和右值分别是什么?
左值是引用某个对象的表达式,就是可以放在赋值左边的东西,如:*(p+1)=7, 没有名字的变量(*(p+1)表达式一定是一个类型的对象)被赋值了,但左值并不一定能被赋值,因为左值可以引用某个常量。 所有的引用都是左值。
右值是表达式的值(不是引用),可以放在赋值右面。
所有的左值都可以是右值,反之不成立。
2、 const对象的指针和const指针的区别
const对象的指针,即常量指针,指向一个常量的指针,指向的内容是常量,不可修改,但指针本身可以修改。、
const指针,即指针常量,指针本身是个常量,不可修改,但指针指向的内容可以修改。
3、 数组指针和指针数组的区别
指针数组: 数组里的每一个元素都为指针的数组,本质为数组,只不过数组里的元素为指针,他的元素可以指向相同类型的不同对象。
数组指针:指向数组的指针,本质为指针,只不过这个指针指向了数组。
4、 指针函数与函数指针的区别
指针函数是指带指针的函数,即本质是一个函数,函数返回类型是某一类型的指针。
函数指针是指向函数的指针变量,即本质是一个指针变量。
5、 指针和引用的异同
不同点
(1)指针是一个实体他在栈中有自己使用的空间,但是引用没有。
(2)引用必须初始化,指针不用但是最好初始化。
(3)指针使用时必须加*,引用不用。
(4)引用只能初始化一次是个专一的人,指针不是。
(5)引用不用const去修饰,但是指针可以。
(6)指针和地址运用自增(++)不同,引用是值进行自增,而指针是地址进行自增。
联系
(1)引用的内部使用指针实现的。
(2)引用是受了限制的指针。
6、引用与值传递的区别
值传递传递的是一个副本,函数对形参的操作不会影响实参的值。而引用传递传递的是引用对象的内存地址,函数对形参的操作会影响实参的值,实参的值会随着形参值的更改而更改。