镇江网站设计建设,有没有做京东客好的网站推荐,觅知网是免费的吗,工业设计是干什么的1#xff0c;指针的基本概念
指针的作用#xff1a;可以通过指针间接访问内存
内存的编号是从0开始记录的#xff0c;一般用十六进制数字表示可以利用指针变量保存地址
上图中的p就是a变量的指针#xff0c;也可以记作*a
2#xff0c;指针变量的定义和使用
指针变量定…1指针的基本概念
指针的作用可以通过指针间接访问内存
内存的编号是从0开始记录的一般用十六进制数字表示可以利用指针变量保存地址
上图中的p就是a变量的指针也可以记作*a
2指针变量的定义和使用
指针变量定义语法数据类型*变量名
int main(){//1,指针的定义 int a10;int *p; pa;//指针指向变量a的地址 couta的地址为 aendl;//打印数据a的地址0x6ffe14cout指针p为 pendl;//打印指针变量p0x6ffe14//2 使用指针//可以通过解引用的方式来找到指针指向的内存 //指针前加*代表解引用找到指针指向的内存中的数据*p1000;couta aendl;cout*p *pendl;
}
*p——解引用的含义可以通过指针来保存一个地址 3指针所占内存空间
指针与数组一样也是一种数据结构既然是一种数据结构那么所占的内存空间是多少呢
在32位操作系统下指针是占4个字节空间大小不管是什么数据类型。 在64位操作系统下指针是占8个字节空间大小。博主这里的os用的是64位的 4空指针和野指针
空指针指针变量指向内存中编号为0的空间
用途初始化指针变量
注意空指针指向的内存是不可以访问的
int main{//指针变量p指向内存地址编号为0的空间int *pNUll;//访问空指针报错//内存编号为0~255为系统所占内存不允许用户访问cout*pendl;
}野指针指针变量指向非法的内存空间
int main(){//指针变量p指向内存地址编号为0x1100的空间int *p(int *)0x1100;//访问野指针报错cout*pendl;}
int *0x1100的作用在于将后面的0x1100十六进制数强制转换为内存地址。
5const修饰指针
const——n.常数恒量 adj.恒定的不变的
假设有以下情景abp的值如下
const修饰指针有三种情况
1const修饰指针——常量指针
特点指针的指向可以修改但指针指向的值不可以修改
const int *pa;
*p20;//错误指针指向的值不可以修改
pb//正确指针的指向可以改 红框为不允许
2const修饰常量——指针常量
特点指针的指向不可以改指针指向的值可以改与常量指针正好相反。
int * const pa;
*p20;//正确指向的值可以改
pb;//错误指针指向不可以改 红线为不允许
3const既修饰指针又修饰常量
特点指针的指向和指针指向的值都不可以改
const int * const pa;
*p20;//错误
pb;//正确 红线红框均不可改
6指针和数组
作用利用指针访问数组中元素
#includebits/stdc.h
using namespace std;
int main(){int arr[]{1,2,3,4,5,6,7,8,9,10};int *parr;for(int i0;i10;i){cout*pendl;p;//因为p是整形指针p的时候地址就会移动四个字节到数组的下一个数据。}
}
输出结果
7指针和函数
作用利用指针做函数参数可以修改实参的值
#includebits/stdc.h
using namespace std;
void swap1(int a,int b){int tempa;ab;btemp;
}
//地址传递
void swap2(int *p1,int *p2){int temp*p1;*p1*p2;*p2temp;
}
int main(){//指针和函数//1值传递int a10;int b20;//swap1(a,b);a20,b10//2地址传递//如果是地址传递可以修饰实参swap2(a,b);couta ab bendl; //a20,b10
} ab更换前后内存空间的内容变化。 8指针数组函数
案例封装一个函数利用冒泡排序实现对整型数组的升序排序
例如数组int arr[10]{4,3,6,9,1,2,10,8,7,5}
#includebits/stdc.h
using namespace std;
void swap(int *arr,int len){//冒泡排序for(int i0;ilen-1;i){for(int j0;jlen-i-1;j){if(arr[j]arr[j1]){int temparr[j];arr[j]arr[j1];arr[j1]temp;}}}
}
void printarr(int *arr,int len){for(int i0;ilen;i){coutarr[i]endl;}
}
int main(){int arr[10]{4,3,6,9,1,2,10,8,7,5};int len10;swap(arr,len);printarr(arr,len);
}
此案例的重点在于让我们学会
将数组传进函数中即是把数组首地址传入即可冒泡排序熟练的运用为使函数体更加灵活在数组长度方面选择一个形参而非固定长度