Appearance
L4_01 指针
一、指针类型
1.1 定义
指针是一个变量,存储的是另一个变量的内存地址。
1.2 声明
cpp
// 声明一个指向 int 类型的指针
int *ptr;
// 声明多个指针
int *p1, *p2;
// 指向常量的指针
const int *ptr;
// 指针常量
int *const ptr;1.3 指针的大小
cpp
#include <iostream>
using namespace std;
int main() {
int *p;
double *q;
char *r;
cout << "int指针大小: " << sizeof(p) << endl;
cout << "double指针大小: " << sizeof(q) << endl;
cout << "char指针大小: " << sizeof(r) << endl;
return 0;
}二、指针类型定义变量
2.1 基本语法
cpp
int value = 10;
int *ptr = &value; // ptr指向value的地址2.2 示例
cpp
#include <iostream>
using namespace std;
int main() {
int num = 42;
int *ptr = #
cout << "变量的值: " << num << endl;
cout << "变量的地址: " << &num << endl;
cout << "指针的值(地址): " << ptr << endl;
return 0;
}三、指针变量的赋值
3.1 基本赋值
cpp
int a = 10;
int *p = &a; // 指针指向变量a3.2 指针之间赋值
cpp
int *p1 = &a;
int *p2 = p1; // p2也指向a的地址3.3 空指针
cpp
int *ptr = nullptr; // C++11标准
int *ptr = NULL; // 传统方式四、解引用
4.1 概念
通过指针访问它指向的变量的值。
4.2 语法
cpp
*指针变量4.3 示例
cpp
#include <iostream>
using namespace std;
int main() {
int num = 100;
int *ptr = #
cout << "num的值: " << num << endl;
cout << "*ptr的值: " << *ptr << endl;
*ptr = 200; // 通过指针修改变量的值
cout << "修改后num的值: " << num << endl;
return 0;
}五、指针运算
5.1 指针加减
cpp
int arr[] = {1, 2, 3, 4, 5};
int *p = arr; // 指向第一个元素
cout << *p << endl; // 输出1
cout << *(p+1) << endl; // 输出2
cout << *(p+2) << endl; // 输出35.2 指针比较
cpp
int arr[5];
int *p1 = arr;
int *p2 = arr + 3;
if (p1 < p2) {
cout << "p1在p2前面" << endl;
}六、指针与数组
6.1 数组名与指针
cpp
int arr[] = {10, 20, 30};
int *p = arr; // 数组名是第一个元素的地址
cout << *arr << endl; // 输出10
cout << *p << endl; // 输出106.2 遍历数组
cpp
int arr[] = {1, 2, 3, 4, 5};
int *p = arr;
for (int i = 0; i < 5; i++) {
cout << *(p + i) << " ";
}七、指针与函数
7.1 指针作为函数参数
cpp
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
int main() {
int x = 5, y = 10;
swap(&x, &y);
cout << "x=" << x << ", y=" << y << endl;
return 0;
}7.2 返回指针的函数
cpp
int* createArray(int size) {
int *arr = new int[size];
for (int i = 0; i < size; i++) {
arr[i] = i;
}
return arr;
}八、示例程序
cpp
#include <iostream>
using namespace std;
int main() {
int value = 42;
int *ptr = &value;
cout << "变量 value:" << endl;
cout << " 值: " << value << endl;
cout << " 地址: " << &value << endl;
cout << "\n指针 ptr:" << endl;
cout << " 值(指向的地址): " << ptr << endl;
cout << " 解引用(*ptr): " << *ptr << endl;
cout << " 指针自身的地址: " << &ptr << endl;
// 修改指针指向的值
*ptr = 100;
cout << "\n修改后:" << endl;
cout << " value = " << value << endl;
cout << " *ptr = " << *ptr << endl;
return 0;
}