C++之指针

news/2024/11/17 23:53:51/

指针的基本概念

指针的作用: 可以通过指针间接访问内存

  • 内存编号是从0开始记录的,一般用十六进制数字表示
  • 可以利用指针变量保存地址

指针变量的定义和使用

指针变量定义语法: 数据类型 * 变量名;

int main() {//1、指针的定义int a = 10; //定义整型变量a//指针定义语法: 数据类型 * 变量名 ;int * p;//指针变量赋值p = &a; //指针指向变量a的地址cout << &a << endl; //打印数据a的地址cout << p << endl;  //打印指针变量p//2、指针的使用//通过*操作指针变量指向的内存cout << "*p = " << *p << endl;system("pause");return 0;
}

指针变量和普通变量的区别

  • 普通变量存放的是数据,指针变量存放的是地址
  • 指针变量可以通过" * "操作符,操作指针变量指向的内存空间,这个过程称为解引用

指针所占内存空间

提问:指针也是种数据类型,那么这种数据类型占用多少内存空间?

int main() {int a = 10;int * p;p = &a; //指针指向数据a的地址cout << *p << endl; //* 解引用cout << sizeof(p) << endl;cout << sizeof(char *) << endl;cout << sizeof(float *) << endl;cout << sizeof(double *) << endl;system("pause");return 0;
}

总结:所有指针类型在32位操作系统下是4个字节

空指针和野指针

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

用途:初始化指针变量

注意:空指针指向的内存是不可以访问的

int main() {//指针变量p指向内存地址编号为0的空间int * p = NULL;//访问空指针报错 //内存编号0 ~255为系统占用内存,不允许用户访问cout << *p << endl;system("pause");return 0;
}

野指针:指针变量指向非法的内存空间

int main() {//指针变量p指向内存地址编号为0x1100的空间int * p = (int *)0x1100;//访问野指针报错 cout << *p << endl;system("pause");return 0;
}

总结:空指针和野指针都不是我们申请的空间,因此不要访问。

const修饰指针

const修饰指针有三种情况

  1. const修饰指针 --- 常量指针
  2. const修饰常量 --- 指针常量
  3. const即修饰指针,又修饰常量
int main() {int a = 10;int b = 10;//const修饰的是指针,指针指向可以改,指针指向的值不可以更改const int * p1 = &a; p1 = &b; //正确//*p1 = 100;  报错//const修饰的是常量,指针指向不可以改,指针指向的值可以更改int * const p2 = &a;//p2 = &b; //错误*p2 = 100; //正确//const既修饰指针又修饰常量const int * const p3 = &a;//p3 = &b; //错误//*p3 = 100; //错误system("pause");return 0;
}

指针和数组

作用:利用指针访问数组中元素

int main() {int arr[] = { 1,2,3,4,5,6,7,8,9,10 };int * p = arr;  //指向数组的指针cout << "第一个元素: " << arr[0] << endl;cout << "指针访问第一个元素: " << *p << endl;for (int i = 0; i < 10; i++){//利用指针遍历数组cout << *p << endl;p++;}system("pause");return 0;
}

指针和函数

作用:利用指针作函数参数,可以修改实参的值

//值传递
void swap1(int a ,int b)
{int temp = a;a = b; b = temp;
}
//地址传递
void swap2(int * p1, int *p2)
{int temp = *p1;*p1 = *p2;*p2 = temp;
}int main() {int a = 10;int b = 20;swap1(a, b); // 值传递不会改变实参swap2(&a, &b); //地址传递会改变实参cout << "a = " << a << endl;cout << "b = " << b << endl;system("pause");return 0;
}

总结:如果不想修改实参,就用值传递,如果想修改实参,就用地址传递


http://www.ppmy.cn/news/475085.html

相关文章

最佳机器学习模型选择指南

关注“Python专栏”微信公众号&#xff0c;回复暗号【面试大全】&#xff0c;立即领取面试题简历模板。 机器学习可以用来解决广泛的问题。但是有很多多不同的模型可以选择&#xff0c;要知道哪一个适合是一个非常麻烦的事情。 本文的总结将帮助你选择最适合需求的机器学习模型…

拿来做壁纸的

拿来做壁纸的 以下图片均来自&#xff1a;https://wallhaven.cc/

抖音壁纸小程序怎么做?手把手教你0元拥有自己的壁纸小程序

背景&#xff1a; 首先感谢开源的大佬&#xff0c;本程序由极客分享开源并发布。 gitee&#xff1a;https://gitee.com/jikebox/jike-getpic github&#xff1a;https://github.com/JiKe-Share/jike-getpic dcloud&#xff1a;https://ext.dcloud.net.cn/plugin?id7722 本人…

做短视频不只有影视剪辑,还可以做壁纸视频,做两个月赚了1万多

现在很多人都觉得账号难做了&#xff0c;其实不是难做&#xff0c;而是同质化太严重&#xff0c;你做的内容又没有亮点&#xff0c;不能在同行中脱颖而出。 大周有个小徒弟就很聪明&#xff0c;另辟蹊径做壁纸类的短视频&#xff0c;刚做了两个月已经有1万多的收益了。 现在都…

用Python收集这些视频只是单纯的想做做壁纸,大家不要误会

首先澄清一下&#xff0c;我用Python收集这些视频&#xff0c;绝不是想做别的什么&#xff0c;真的只是用来做动态壁纸&#xff0c;大家不要误会&#xff01;我不是那样的人~ 这样的不过份吧 &#x1f63b; 阅读本文你需要准备 1、环境 Python pycharm没有或者不会安装可以看…

用“每日必应”首页图做壁纸,每天不重样!

想法起因 每天面对电脑屏幕同样的壁纸未免太过枯燥&#xff0c;由于平时搜索多用必应&#xff08;Bing&#xff09;&#xff0c;见到每天必应首页的图片真的很好看&#xff0c;一来想保存下来&#xff0c;二来顺便可以做壁纸呀。 代码 # -*- coding: utf-8 -*- ""…