一杯清酒邀明月
天下本无事,庸人扰之而烦耳。
posts - 3121,comments - 209,views - 580万

一、指针的基本概念

  指针是C++中非常重要的概念,也是初学者经常会遇到的问题。指针是一个存储变量地址的变量,它指向存储器中的一个地址。使用指针可以直接操作存储器中的数据,因此常用于处理复杂的数据结构和算法。

二、指针的定义和使用

  定义指针以及使用指针的步骤如下:

复制代码
1 // 定义指针
2 int *p;
3 // 指针指向一个变量
4 int a = 10;
5 p = &a;
6 // 通过指针访问变量
7 *p = 20; // a的值变为20
复制代码

  指针需要指向一个变量,即需要将一个变量的地址赋值给指针。可以使用取地址符“&”获取一个变量的地址,并将地址赋值给指针。使用指针访问变量的值时,需要使用解引用符“*”,可以理解为从指针指向的地址中取出变量的值。

三、指针和数组

  指针和数组是密不可分的,因为数组本质上就是一段连续的内存空间,每个元素在内存中的地址是连续的。可以使用指针对数组进行访问:

1 int arr[] = {1, 2, 3, 4, 5};
2 int *p = arr; // 指针指向数组的第一个元素
3 for(int i = 0; i < 5; i++){
4     cout << *(p + i) << endl; // 通过指针访问数组元素
5 }

  在指针和数组中,需要注意指针越界问题。使用指针访问数组元素时,要确保指针不会越界,否则会导致程序崩溃。

四、指针和函数

  指针和函数密切相关。可以定义指针类型的参数,从而可以将变量的地址传递给函数,从而在函数内部直接修改变量的值,而不需要返回值。

复制代码
 1 void swap(int *a, int *b){
 2     int temp = *a;
 3     *a = *b;
 4     *b = temp;
 5 }
 6 
 7 int main(){
 8     int x = 10, y = 20;
 9     swap(&x, &y); // 将x和y的地址传递给函数
10     cout << x << " " << y << endl; // 20 10
11     return 0;
12 }
复制代码

  这里定义了一个函数swap,接收两个指针类型的参数a和b,交换指针所指向的变量的值。在主函数中,调用swap函数时需要将x和y的地址传递给函数。调用结束后,x和y的值也被交换了。

五、指针和动态内存分配

  指针和动态内存分配也是密切相关的。在C++中,可以使用new运算符动态地分配内存。分配后会返回所分配内存块的首地址,需要使用指针来接收它:

1 int *p = new int; // 动态分配一个整型变量
2 *p = 10; // 对指针所指向的变量进行赋值
3 delete p; // 释放动态分配的内存

使用new运算符可以在程序运行时动态分配内存,在指针访问结束后需要使用delete运算符释放内存,否则会产生内存泄漏的问题。

六、指针和常量

  指针和常量也是有关系的。可以定义一个指向常量的指针,或者定义一个常量指针。定义一个指向常量的指针时,不能通过指针来修改所指向变量的值。定义一个常量指针时,指针本身是一个常量,不能修改指针所指向的地址。

1 const int *p1 = &a; // 定义一个指向常量的指针,不能修改a的值
2 int *const p2 = &a; // 定义一个常量指针,不能修改指针的值

  这里定义了一个指向常量的指针p1,指针不能修改所指向变量a的值。定义了一个常量指针p2,指针本身是一个常量,不能修改指针所指向的地址。这两种方式的应用取决于要解决的问题。

七、指针和空指针

  空指针是一个特殊的指针,它不指向任何地址。在C++中,可以使用NULL或nullptr来定义一个空指针。针对空指针的操作需要进行特殊处理,否则会出现程序崩溃的问题。

1 int *p = nullptr;
2 if(p == nullptr){
3     cout << "p是空指针" << endl;
4 }

  这里定义了一个空指针p,并且判断p是否指向了一个有效的地址。在使用空指针时需要进行非空判断,确保指针指向了有效的地址。

posted on   一杯清酒邀明月  阅读(186)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
历史上的今天:
2022-08-11 Qt QImage读取某些jpg或png图片失败的问题
2021-08-11 Qt 解决:fatal error C1189: #error : include 'stdafx.h' before including this file for PCH
2021-08-11 Qt error: C2440: “默认参数”: 无法从“const wchar_t [1]”转换为“BSTR”
2021-08-11 Qt 使用包含MFC的内容包含过的库
2020-08-11 Qt QPainter::end: Painter ended whith 2 saced states
2020-08-11 Qt QPixmap, QByteArray, QString互相转换
2020-08-11 Qt 绘图(QBitmap,QPixmap,QImage,QPicture)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示