C++指针
Sunday 2024/1/3 CC++
# C++指针
是一种变量,记录着内存地址
语法:
int x = 10;
int* p = &x;
1
2
2
注意,指针的数据类型要和被记录的数据的数据类型相同
使用:
在指针变量前加*表示解引用,获取到指针指向的数据:*指针变量
int x = 10;
int* p = &x;
*p // 10
1
2
3
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
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
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
2
3
4
5
6
7
8
9
总结,无论是NULL还是野指针,都是没有权限访问的内存地址,不要访问他们
# const修饰指针
有三种情况:
const修饰指针 --常量指针
const int* p =&a; //常量指针 // 指针的指向可以修改,但是指向的值不能更改
1
2const修饰常量 --指针常量
int* const p =&a; //指针常量 // 指针的指向不能改,但是指向的值可以改
1
2const即修饰指针又修饰常量
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
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
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
2
3
4
5
6
7
8
9
10