欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 社会 > C++指针的使用

C++指针的使用

2025/6/18 21:03:19 来源:https://blog.csdn.net/ha0ha0xuexi/article/details/148695288  浏览:    关键词:C++指针的使用

1. 指针的定义和使用

指针是存储变量地址的变量。定义格式如下:

类型 *指针名;

示例:

int a = 10;
int* p = &a; // p存储a的地址
std::cout << *p << std::endl; // 输出10,*p为解引用

2. 指针占据的内存空间

• 指针本身也是一个变量,存储的是地址
• 在32位系统下,指针占4字节;在64位系统下,指针占8字节,与指向的数据类型无关。
示例:

int* p1;
double* p2;
std::cout << sizeof(p1) << " " << sizeof(p2) << std::endl; // 通常输出4或8

3. 空指针

• 空指针(nullptr或NULL)表示指针未指向任何有效内存。
• 常用于初始化指针,防止野指针。
示例:

int* p = nullptr;
if (p == nullptr) {std::cout << "p是空指针" << std::endl;
}

4. 野指针

• 指针未初始化或已释放内存后仍被使用,称为野指针。
• 使用野指针会导致未定义行为,需避免。
示例:

int* p; // 未初始化,p为野指针
// *p = 10; // 错误,不能解引用野指针

5. const修饰指针

• const可以修饰指针本身或指针指向的数据。

形式含义
const int* p指向常量的指针,不能通过p修改值
int* const p常量指针,p的地址不可变
const int* const p指向常量的常量指针

示例:

int a = 10, b = 20;
const int* p1 = &a; // *p1只读
int* const p2 = &a; // p2只指向a
const int* const p3 = &a; // 都不可变

6. 指针和数组

数组名本质上是首元素的指针
• 可以用指针遍历数组
示例:

int arr[3] = {1, 2, 3};
int* p = arr;
for (int i = 0; i < 3; ++i) {std::cout << *(p + i) << " "; // 输出1 2 3
}

7. 指针和函数

• 可以用指针作为函数参数,实现“地址传递”,允许函数修改外部变量
• 可以返回指针,也可以用指针数组、指向函数的指针等。
示例:

void swap(int* a, int* b) {int temp = *a;*a = *b;*b = temp;
}
int x = 1, y = 2;
swap(&x, &y); // x=2, y=1

8. 指针配合数组和函数的案例

数组求和函数:

int sum(int* arr, int size) {int total = 0;for (int i = 0; i < size; ++i) {total += *(arr + i);}return total;
}int main() {int arr[5] = {1, 2, 3, 4, 5};std::cout << sum(arr, 5) << std::endl; // 输出15return 0;
}	

9. 其他注意事项

• 指针可以指向任意类型,包括自定义类型、结构体等。
• 指针运算需谨慎,避免越界和非法访问。
• C++11推荐使用nullptr代替NULL。

总结:

• 指针是C++强大但需谨慎使用的特性,能高效操作内存和实现复杂数据结构。
• 正确初始化、使用const、避免野指针和空指针,是安全使用指针的关键。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词