C++指针

2020-05-08  本文已影响0人  JuliusL

一言以蔽之: 指针能间接的访问变量的内存,进行读和写的操作。

定义指针

数据类型 * 指针变量名

int a = 0;
int * p; //定义指针
p = &a; //指针记录变量a的地址

使用指针

可以通过解引用的方式来找到指针指向的内容
指针前加 * 代表解引用,找到指针指向的内存中的数据

*p = 1000; //这段代码会把 a 变量里的值也修改
cout << *p << endl;//访问a的数据

指针所占内存空间

32位操作系统:占4个字节空间
64位操作系统:占8个字节空间

cout << sizeof(int *) << endl;

空指针和野指针

空指针和野指针都不是我们申请的空间,因此不能访问

空指针

定义:指针变量指向内存中编号为0的空间。
用途:初始化指针变量。
注意:空指针指向的内存是不可以访问的。
0~255之间的内存编号是系统占用的,因此不可访问

int * p = NULL;
*p = 100;//空指针不可访问, nullptr

野指针

定义:指针变量指向非法的内存空间
内存地址没有申请是不可以访问的!!!

int * p = (int *)0x1100;
cout << *p << endl;

const修饰指针

const修饰指针有三种情况:
1,const修饰指针——常量指针
2,const修饰常量——指针常量
3,const既修饰指针,又修饰常量

1,常量指针(const int * p = &a)

指针的指向可以修改,但是指针指向的值不可以修改

int a = 10;
int b = 20;
const int * p = &a;
*p = 20;//错误,指针的值不可以改
p = &b;//正确,指针指向可以改

2,指针常量(int * const p = &a)

值可以改,但是指向不可以改

int a = 10;
int b = 20;
const int * p = &a;
*p = 20;//正确,指针的值可以改
p = &b;//错误,指针的指向不可以改

3,const既修饰指针,又修饰常量

指针的指向和值都不可以修改

int a = 10;
int b = 20;
const int * p = &a;
*p = 20;//错误,指针的值不可以改
p = &b;//错误,指针的指向不可以改

指针和数组

指针在数组中利用+1可以进行偏移。

int arr[] = {1,2,3,4,5,6,7,8,9,10};
int * p = arr;
for (int i = 0; i<10; i++) {
    cout << *p << endl;
    *p++;
}

指针和函数

利用指针可以做地址传递

void swap(int * a,int * b){
  int temp = *a;
  int *a = *b;
  int *b = temp;
}
int a = 10;
int b = 20;
swap(&a,&b);
上一篇 下一篇

猜你喜欢

热点阅读