C++指针

222 阅读1分钟

1. 定义指针: 数据类型 * 指针变量名

int *p;
// 让指针记录变量a的地址
P = &a;

  2. 使用指针

可以通过解引用的方式来找到指针指向的内存

指针前加*, 表示解引用,找到指针指向的内存里的数据。

*p = 1000;

 

3. 指针占用的内存空间

在32位操作系统下,占用4字节。在64位下,占8字节。一般用32位操作系统开发。

X86 是32位系统, x64 是64位系统。

 

4. 空指针:指针变量执行内存中编号为0的空间

4.1 用途:用于给指针变量初始化

int *p = NULL;

 

4.2 空指针是不可以访问的

0 - 255 之间的内存编号是系统占用的,不可以访问。

cout << *p; // 错

 

5. 野指针: 指针变量指向非法的内存空间

int *p = (int *) 0x1100;

cout<<*P; // 编译通过,执行时报错

 

6. const 修饰指针

const int *p = &a; // 常量指针,指针的指向可以改,但指针指向的值不可以改
int * const p = &a; // 指针常量,指针的指向不可以改,指针指向的值可以改
const int * const p = &a; // 指针的指向和指针指向的值都不可以改

7. 指针和数组

int arr[10] = {1, 2, 3, 4, 5};
int * p = arr; // 数组名就是数组的首地址
cout<<*p; // 数组第一个数据 1
P++;
cout<<*p; // 数组第二个数据 2

 

8. 指针和函数: 值传递, 地址传递,

8.1 值传递:不修改实参

void swap01(int a, int b)
{
    int tmp = a;
    a = b;
    b = tmp;
}

  8.2 地址传递:修改实参


void swap02(int *a, int *b)
{
    int tmp = *a;
    *a = *b;
    *b = tmp;
}