指针面试复习
作者:
@简单
,
2021-06-07 21:09:29
,
所有人可见
,
阅读 405
指针
内存和地址
- 将内存抽象成一个很大的一维字符数组,每一个字节可以是32位或64位,这个内存编号叫地址
- &获取地址,有一些不能获取地址的
- 32位和64位地址不同. 32占4字节,64占8字节.
指针和指针变量
- 指针是数据类型:int double,指针存的变量是地址。
- 指针变量:本质就是变量,该变量存储的是内存地址,不同数据不同类型的指针变量所占存储单元长度是相同的。
声明和初始化变量
- int* p1, p2; (声明创建一个指针变量p1和一个int类型变量p2)
- int p1, p2; (声明创建一个指针变量p1和一个指针变量p2)
野指针 悬挂指针
- c++11 使用nullptr表示空
- 包含c++头文件 NULL表示0,c文件NULL表示 ((void *)0)
指针的宽度和跨度
- 指针变量的自身类型:去掉变量名,剩余的部分就是指针变量的自身类型。
int * ptr; 指针变量 ptr 的自身类型是 int *
int ptr; 指针变量 ptr 的自身类型是 int
- 指针变量的指向类型:去掉变量名及离它最近的一个,剩余的部分就是指针变量指向的类型。
int * ptr; 指针变量 ptr 指向的类型是 int
int * ptr; 指针变量 ptr 指向的类型是 int *
指针变量所取内容的宽度
- 指针变量所取内容的宽度是由指针变量所指向的类型长度决定的。
int num = 0x01020304;
int *p = #
cout << *p << endl;
short *p1 = (short *)#
cout << *p1 << endl;
结论
void类型指针
- void#类型不要解除引用.
- 主要做函数参数。
const 和指针(常见面试题)
#include <iostream>
using namespace std;
// const 和 指针
int main() {
int num = 100;
const int a = 10;
const int *ptr = &a;
// 指针指向的数据是一个常量,常量的指针
// 第一种情况:const在*的左边 修饰的是* (*p1只读的, p1可读可写)
const int* p1 = #
// *p1 = 20;
int data = 20;
p1 = &data;
cout << *p1 << endl;
// 指针变量p2是一个常量,指针(类型)常量(int类型常量),常指针
// 第二种情况:const在*的右边 修饰的是p2, (*p2可读可写 p2只读)
int* const p2 = #
*p2 = 200;
cout << *p2 << endl;
// p2 = &data;
// 第三种情况:const在*的左右两边 既修饰* 也修饰指针变量(*p3只读 p3只读)
const int* const p3 = #
// *p3 = 10;
// p3 = &data;
return 0;
}
指针数组