C++中的指针怎么定义和使用
发表于:2025-01-18 作者:千家信息网编辑
千家信息网最后更新 2025年01月18日,本篇内容主要讲解"C++中的指针怎么定义和使用",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C++中的指针怎么定义和使用"吧!1 指针的基本概念作用:可以
千家信息网最后更新 2025年01月18日C++中的指针怎么定义和使用
本篇内容主要讲解"C++中的指针怎么定义和使用",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C++中的指针怎么定义和使用"吧!
1 指针的基本概念
作用:可以通过指针间接访问内存。
内存编号是从0开始记录的,一般用十六进制数字表示。可以利用指针变量保存地址。
2 指针变量的定义和使用
指针变量定义语法:
数据类型* 变量名;&可以取地址;*可以取地址存放的值
示例:
#includeusing namespace std;int main(){ int a = 10; //1.指针定义的语法:数据类型 * 指针变量名; int* p; //int* 定义一个指向整数型的指针变量 p = &a; cout << "a的地址是:" << &a << endl; cout << "指针p是:" << p << endl; //2.使用指针,可以通过解引用的方式来找到指针指向的内存 //指针变量前加* 代表解引用,就是找到一个地址内存中存放的数据 *p = 100; cout << "a = " << a << endl; cout << "*p = " << *p << endl; system("pause"); return 0;}
3 指针所占内存空间
指针也是种数据类型,所以指针也是占内存的
32位操作空间下,占用4个字节。
64位操作空间下,占用8个字节。
#includeusing namespace std;int main(){ int a = 10; int* p = &a; cout << "sizeof(int*)=" << sizeof(int*) << endl; cout << "sizeof(float*)=" << sizeof(float*) << endl; cout << "sizeof(double*)=" << sizeof(double*) << endl; cout << "sizeof(char*)=" << sizeof(char*) << endl; cout << "sizeof(string*)=" << sizeof(string*) << endl; system("pause"); return 0;}
可以改变上面的x86(32位)和x64(64位),查看输出结果。
4 空指针和野指针
空指针:指针变量指向内存中编号为0的空间
用途:初始化指针变量
注意:指针变量指向的内存是不可以访问的
示例:
#includeusing namespace std;int main(){ //1空指针用于给指针变量初始化. int* p = NULL; //就是0 //空指针是不可以进行访问的 //0-255之间的内存编号是系统占用的,因此不可以访问 *p = 100; //因为这里不可以访问,所以程序直接退出了,后面的代码不再执行。 cout << p << *p << endl; system("pause"); return 0;}
野指针:指针变量指向非法的内存空间
示例:
#includeusing namespace std;int main(){ //野指针 int* p = (int*)0x1100; //这里定义的这个地址就是不属于我们当前地址空间的地址,就是越界了,也无法访问,所以程序会自动退出。 cout << *p << endl; system("pause"); return 0;}
5 const修饰指针
const修饰指针有三种情况:
1.常量指针:指向常量的指针
2.指针常量:指针类型的常量
3.指向常量的指针常量:一个是本身就是常量的指针指向了一个常量。
const int* p = &a; ---常量指针特点:指针的指向可以修改,但是指针指向的值不可以修改。(帮助理解:从右向左看,const在最后起固定作用,固定了*p的值,但是没有固定p的指向,即使改变了p的指向,*p也是不可更改的。)int* const p = &a; ---常量指针特点:指针的指向不可以修改,但是指针指向的值可以修改。(帮助理解:从右向左看,const在p获得地址后起固定作用,固定了p的指向,但是没有固定*p的值)const int* const p = &a;特点:指针的指向和指针指向的值都不可以修改。
示例:
#includeusing namespace std;int main(){ int a = 10, b = 20; //常量指针 const int* p = &a; //*p = 10;错误,指向的值不可修改 p = &b; //指向可以修改 //*p = 30;即使指向改变,指向的值也是不可修改的。 cout << *p << endl; //指针常量 int* const p2 = &a; //p2 = &b;错误,指向不可修改 *p2 = 100;//指向的值可以修改 cout << *p2 << endl; //指向常量的指针常量 const int* const p3 = &a; //p3 = &b;错误,指向不可修改 //*p3 = 100;错误,指向的值不可修改 system("pause"); return 0;}
6 指针和数组
作用:利用指针访问数组中元素
示例:
#includeusing namespace std;int main(){ int arr[10] = { 1,2,3,4,5,6,7,8,9,10 }; cout << "第一个元素为:" << arr[0] << endl; int* p = arr;//首地址赋予了指针变量p cout << p << endl; cout << "利用指针访问第一个元素:" << *p << endl; p++;//指针+1是加一存储单位,int型变量占4字节,所以+4 cout << p << endl; cout << "利用指针访问第二个元素:" << *p << endl; char brr[2] = { 'a','b' }; char* q = brr; cout << (int)q << endl; q++; //字符型变量占1个字节,所以+1 cout << (int)q << endl; //利用指针遍历数组 p = arr; for (int i = 0; i < 10; i++) { cout << *p << endl; p++; } system("pause"); return 0;}
7 指针和函数
作用:利用指针作函数参数,可以修改实参的值。
对比值传递,值传递是为形参另开辟一段内存进行运算;
而指针传递则是传递地址,通过对地址访问,就可以直接对实参做出改变。
#includeusing namespace std;void swap01(int a, int b) //值传递{ int temp = a; a = b; b = temp; cout << "a = " << a << endl; cout << "b = " << b << endl;}void swap02(int* p1, int* p2) { int temp = *p1; *p1 = *p2; *p2 = temp;}int main(){ int a = 10, b = 20; swap01(a, b); cout << "a = " << a << endl; cout << "b = " << b << endl; swap02(&a, &b); cout << "a = " << a << endl; cout << "b = " << b << endl; system("pause"); return 0;}
8 指针、数组、函数
案例:封装一个函数,利用冒泡排序,实现对整型数组的升序排序
例如数组,int arr[10]={4,3,6,9,1,2,10,8,7,5} ;
#includeusing namespace std;void coutarr(int* arr,int len) { for (int i = 0; i < len; i++) { cout << arr[i] << " "; } cout << endl;}void bubbleSort(int* arr, int len) //值传递{ for (int i = 0; i < len; i++) { for (int j = 0; j + i < len - 1; j++) { if (arr[j] > arr[j+1]) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } }}int main(){ int arr[10] = { 4,3,6,9,1,2,10,8,7,5 }; int len = sizeof(arr) / sizeof(arr[0]); cout << "排序前的数组为:" << endl; coutarr(arr, len); bubbleSort(arr, len); cout << "排序后的数组为:" << endl; coutarr(arr, len); system("pause"); return 0;}
到此,相信大家对"C++中的指针怎么定义和使用"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
指针
指向
变量
常量
地址
内存
数组
空间
作用
就是
示例
元素
函数
字节
数据
类型
错误
排序
C++
特点
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
闵行区软件开发使用方法
剑灵最好的捏脸数据库
2020村网络安全宣传总结
腾讯云服务器没有密码可以进入吗
搭建vpdn服务器
洛阳逐梦网络技术有限公司职员
华为手机服务器安装失败怎么回事
潮州自主可控软件开发价目表
广联达和用友软件开发哪个好点
服务器系统用固态硬盘
新浪云连接数据库
龙腾传世跨服服务器在哪找
isi数据库
网吧服务器多少瓦
删除数据文件是对数据库的管理吗
软件开发单位按什么科目
连接军综网安全云服务器异常
通信网络技术毕业论文
宣威gpu云服务器
禅道数据库 bug统计
自动化软件开发要多少钱
等保网络管理和网络安全
山东春考网络技术专业科目
江西达克互联网科技有限公司
滁州ktv服务器回收公司
网络安全攻击数据集
网络技术学院都有什么专业
软件开发办公区装扮
何谓数据库的大对象数据
数据库中的宏