C++中的指针怎么定义和使用
C++中的指针怎么定义和使用
本篇内容主要讲解“C++中的指针怎么定义和使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++中的指针怎么定义和使用”吧!
1 指针的基本概念
作用:可以通过指针间接访问内存。
内存编号是从0开始记录的,一般用十六进制数字表示。可以利用指针变量保存地址。
2 指针变量的定义和使用
指针变量定义语法:
数据类型*变量名;&可以取地址;*可以取地址存放的值
示例:
#include<iostream>usingnamespacestd;intmain(){inta=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");return0;}
3 指针所占内存空间
指针也是种数据类型,所以指针也是占内存的
32位操作空间下,占用4个字节。
64位操作空间下,占用8个字节。
#include<iostream>usingnamespacestd;intmain(){inta=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");return0;}
可以改变上面的x86(32位)和x64(64位),查看输出结果。
4 空指针和野指针
空指针:指针变量指向内存中编号为0的空间
用途:初始化指针变量
注意:指针变量指向的内存是不可以访问的
示例:
#include<iostream>usingnamespacestd;intmain(){//1空指针用于给指针变量初始化.int*p=NULL;//就是0//空指针是不可以进行访问的//0-255之间的内存编号是系统占用的,因此不可以访问*p=100;//因为这里不可以访问,所以程序直接退出了,后面的代码不再执行。cout<<p<<*p<<endl;system("pause");return0;}
野指针:指针变量指向非法的内存空间
示例:
#include<iostream>usingnamespacestd;intmain(){//野指针int*p=(int*)0x1100;//这里定义的这个地址就是不属于我们当前地址空间的地址,就是越界了,也无法访问,所以程序会自动退出。cout<<*p<<endl;system("pause");return0;}
5 const修饰指针
const修饰指针有三种情况:
1.常量指针:指向常量的指针
2.指针常量:指针类型的常量
3.指向常量的指针常量:一个是本身就是常量的指针指向了一个常量。
constint*p=&a;---常量指针特点:指针的指向可以修改,但是指针指向的值不可以修改。(帮助理解:从右向左看,const在最后起固定作用,固定了*p的值,但是没有固定p的指向,即使改变了p的指向,*p也是不可更改的。)int*constp=&a;---常量指针特点:指针的指向不可以修改,但是指针指向的值可以修改。(帮助理解:从右向左看,const在p获得地址后起固定作用,固定了p的指向,但是没有固定*p的值)constint*constp=&a;特点:指针的指向和指针指向的值都不可以修改。
示例:
#include<iostream>usingnamespacestd;intmain(){inta=10,b=20;//常量指针constint*p=&a;//*p=10;错误,指向的值不可修改p=&b;//指向可以修改//*p=30;即使指向改变,指向的值也是不可修改的。cout<<*p<<endl;//指针常量int*constp2=&a;//p2=&b;错误,指向不可修改*p2=100;//指向的值可以修改cout<<*p2<<endl;//指向常量的指针常量constint*constp3=&a;//p3=&b;错误,指向不可修改//*p3=100;错误,指向的值不可修改system("pause");return0;}
6 指针和数组
作用:利用指针访问数组中元素
示例:
#include<iostream>usingnamespacestd;intmain(){intarr[10]={1,2,3,4,5,6,7,8,9,10};cout<<"第一个元素为:"<<arr[0]<<endl;int*p=arr;//首地址赋予了指针变量pcout<<p<<endl;cout<<"利用指针访问第一个元素:"<<*p<<endl;p++;//指针+1是加一存储单位,int型变量占4字节,所以+4cout<<p<<endl;cout<<"利用指针访问第二个元素:"<<*p<<endl;charbrr[2]={'a','b'};char*q=brr;cout<<(int)q<<endl;q++;//字符型变量占1个字节,所以+1cout<<(int)q<<endl;//利用指针遍历数组p=arr;for(inti=0;i<10;i++){cout<<*p<<endl;p++;}system("pause");return0;}
7 指针和函数
作用:利用指针作函数参数,可以修改实参的值。
对比值传递,值传递是为形参另开辟一段内存进行运算;
而指针传递则是传递地址,通过对地址访问,就可以直接对实参做出改变。
#include<iostream>usingnamespacestd;voidswap01(inta,intb)//值传递{inttemp=a;a=b;b=temp;cout<<"a="<<a<<endl;cout<<"b="<<b<<endl;}voidswap02(int*p1,int*p2){inttemp=*p1;*p1=*p2;*p2=temp;}intmain(){inta=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");return0;}
8 指针、数组、函数
案例:封装一个函数,利用冒泡排序,实现对整型数组的升序排序
例如数组,int arr[10]={4,3,6,9,1,2,10,8,7,5} ;
#include<iostream>usingnamespacestd;voidcoutarr(int*arr,intlen){for(inti=0;i<len;i++){cout<<arr[i]<<"";}cout<<endl;}voidbubbleSort(int*arr,intlen)//值传递{for(inti=0;i<len;i++){for(intj=0;j+i<len-1;j++){if(arr[j]>arr[j+1]){inttemp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}}}}intmain(){intarr[10]={4,3,6,9,1,2,10,8,7,5};intlen=sizeof(arr)/sizeof(arr[0]);cout<<"排序前的数组为:"<<endl;coutarr(arr,len);bubbleSort(arr,len);cout<<"排序后的数组为:"<<endl;coutarr(arr,len);system("pause");return0;}
到此,相信大家对“C++中的指针怎么定义和使用”有了更深的了解,不妨来实际操作一番吧!这里是恰卡编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!