指针

概念
指针是用来通过指针间接访问内存
可以理解为在公寓的门牌号可以知道住户信息
int a=10;
一个inc类型的变量为a,ta的存储了10的信息,目前如何通过地址拿到存储的10?
指针语法:
数据类型 * 指针变量名;
int *p;
定义指针
int a=10;
int *p;
p=&a;
//获得a的地址
cout<<"a地址为:"<<&a<<endl;
//指针p的地址:
cout<<“指针p的地址:”<<p<<endl;
2、使用指针
//可以通过解引用的方式来找到指针指向内存的数据
cout<<"p指向a内存的数据"<<*p<<endl;
*p=300;
//通过指针进行修改a的值
cout<<"a="<<a<<endl;
cout<<"* p="<<* p<<endl;
案例:
通过指针更改变量的值
int num=10; cout<<"num="<<&num<<endl; int *p=& num; cout<<"num="<<&num<<endl; cout<<"*p="<<* 星号P<<endl; *p=25; cout<<"num="<<&num<<endl;
指针所占的内存空间大小
在32位操作系统下,占用4个字节空间;64位下占8个字节空间
int a=10; int *p=&a; cout<<"sizeof(int *)“<<sizeof(p); cout<<"sizeof(int *)“<<sizeof(int *); cout<<"sizeof(int *)“<<sizeof(float *); cout<<"sizeof(int *)“<<sizeof(double *); cout<<"sizeof(int *)“<<sizeof(char *);
空指针
指针变量指向内存中编号为0的空间称为空指针
用法:初始化指针变量
注意:空指针指向的内存是不可以访问的
案例:
空指针用来给指针变量进行初始化;
int *p=NULL;
空指针不可以进行访问的
*P=12;//错误的
野指针
野指针指向的是非法的空间
int *p=(int *)0x1110;
cout<<*p<<endl;//错误,读取访问权限冲突
在程序中避免出现野指针
const修饰指针
const修饰指针:常量指针
const修饰常量:指针常量
const即修饰指针又修饰常量
int a=10;
常量指针
const int *p=&a;
特点:指针的指向可以修改,但指针指向的值不可以修改
*P=20;//错误,指针指向的值不可以修改
*p=&b;//指针指向可以修改
指针常量
int *const p=&a;
特点:指针的指向不可以修改,指针指向的值可以修改
*p=20;//对的,指针指向的值可以改
p=&b;//错误,指针的指向不可以修改
const即修饰指针又修饰常量
const int *const p=&a;
特点:指针的指向和值都不可以修改
指针和数组
作用:利用指针访问数组中元素
int main(){
int arr[]={1,2,3,4,5,6,7,8,9,10};
cout<<"第一个数组元素"<<arr[0]<<endl;
int *p=&arr;//arr就是指向数组的首地址
cout<<”利用指针访问第一个元素“<<*p<<endl;
*p++;//利用指针向后偏移四个字节
cout<<”利用指针访问第二个元素“<<*p<<endl;
}
利用指针遍历数组
int arr[]={1,2,3,4,5,6,7,8,9,10};
int *p1=arr;
for(int i=0;i<10;i++){
cout<<*p1<<endl;
p++;
}
指针和函数
1、值传递
实现连个数字进行交换
void swap(int a,int b){ int temp=a; a=b; b=temp; cout<<swap a=<<a<<endl; cout<<swap a=<<a<<endl; } void swap01(int *p1,int *p2){ int temp=*p1; *P1=*p2; p2=temp } int main(){ int a,b; cout<<"输入a:"; cin>>a; cout<<"输入b:"; cin>>b; swap(int a,int b); cout<<"a="<<a<<",b="<<b<<endl; 2、地址传递 swap01(&a,&b); cout<<"a="<<a<<",b="<<b<<endl; }


还没有评论,来说两句吧...