C++指针

2024/1/3 CC++

# C++指针

是一种变量,记录着内存地址

语法:

int x = 10;
int* p = &x;
1
2

注意,指针的数据类型要和被记录的数据的数据类型相同

使用:

在指针变量前加*表示解引用,获取到指针指向的数据:*指针变量

int x = 10;
int* p = &x;
*p // 10
1
2
3

示例

#include <iostream>
using namespace std;

int main() {
	int x = 10;
	int* p = &x;
	cout << "x的地址为" << &x << endl;
	cout << "p的值为" << p << endl;
	cout << "*p=" << *p << endl; // 10
	cout << "重赋值*p为1000" << endl;
	*p = 1000;
	cout << "x=" << x << endl; // 1000
	cout << "*p=" << *p << endl; // 1000
	system("pause");
	return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 指针占用的空间

32位系统下,无论何种类型指针,都是4个字节,64位则是8个字节

# 空指针

定义:指针变量指向内存中编号为0的空间

用途:初始化指针变量

注意:空指针,指向的内存是不能访问的

#include <iostream>
using namespace std;

int main() {
	// 定义空指针
	int* p = NULL;
	// 空指针不能访问
	// 0~255之间的内存编号是系统占用的,因此不能直接解引用,访问
	*p = 100;
	
	system("pause");
	return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13

# 野指针

定义:指向非法内存空间的指针

因为指针是指向一个非法地址,所以没有操作权限,如果操作,会导致报错

#include <iostream>
using namespace std;

int main() {
	// 定义野指针
	int* p = (int *)0x1100;
	system("pause");
	return 0;
}
1
2
3
4
5
6
7
8
9

总结,无论是NULL还是野指针,都是没有权限访问的内存地址,不要访问他们

# const修饰指针

有三种情况:

  • const修饰指针 --常量指针

    const int* p =&a; //常量指针
    // 指针的指向可以修改,但是指向的值不能更改
    
    1
    2
  • const修饰常量 --指针常量

    int* const p =&a; //指针常量
    // 指针的指向不能改,但是指向的值可以改
    
    1
    2
  • const即修饰指针又修饰常量

    const int* const p =&a; //即修饰指针,又修饰常量
    // 指针的指向和值都不能改
    
    1
    2

# 指针和数组

利用指针访问数组中的元素

#include <iostream>
using namespace std;

int main() {
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int* p = arr; //arr就是数组首地址
	//利用指针访问第一个元素
	cout << "arr[0]=" << *p << endl;
	//利用指针访问第二个元素
	p++; //让指针向后偏移四个字节
	cout << "arr[1]=" << *p << endl;
	system("pause");
	return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

for循环和指针遍历输出数组

#include <iostream>
using namespace std;

int main() {
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int* p = arr; //arr就是数组首地址
	for(int i =0 ;i<sizeof(arr)/sizeof(arr[0]);i++){
		cout << "arr["<< i << "] = " << *p << endl;
		p++;
	}
	system("pause");
	return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13

输出

arr[0] = 1
arr[1] = 2
arr[2] = 3
arr[3] = 4
arr[4] = 5
arr[5] = 6
arr[6] = 7
arr[7] = 8
arr[8] = 9
arr[9] = 10
1
2
3
4
5
6
7
8
9
10
最后更新于: 2024/2/27 17:14:39