指针部分笔记

01指针:
1、定义指针int a=10;
//指针定义的语法:数据类型*指针变量名;
int*p(point:指针);
//让指针记录变量a的地址
p=&a;
cout<<"a的地址为: “<< &a<<end1;//打印数据a的地址
cout<<"指针a为: "<<p<<end1;//打印指针变量p
2、使用指针
//可以通过解引用的方式来找到指针指向的内存
//指针前加*代表解引用,找到指针指向的内存中的数据
*p=1000;
 cout<<"a= "<<a<<end1;
cout<<"*p= "<<*p<<end1;
指针的用途:通过p能找到这个内存,*p可以修改这个内存;指针可以间接的来访问这篇内存,并且对其进行读和写的操作;
 
02指针:
//指针所占内存空间
int a=10;
//int*p;
//p=&a;
int*p=&a;(与前两行所代表的意思相同)
//在32位操作系统下,指针是占4个字节空间大小,不管是什么数据类型
//在64位操作系统下,指针是占8个字节空间大小
cout<<"sizeof(int*)="<<sizeof(p或int*)<<end1;
cout<<"sizeof(int*)="<<sizeof(float*)<<end1;
cout<<"sizeof(int*)="<<sizeof(double*)<<end1;
cout<<"sizeof(int*)="<<sizeof(char*)<<end1;

03指针:
空指针(nullptr):指针变量指向内存中编号为0的空间
用途:初始化指针变量(空指针指向的内存是不可以访问的)
int*p=NULL;
//0-255之间的内存编号是系统占用的,因此不可以访问

04指针
野指针:指针变量指向非法的内存空间
在程序中,尽量避免出现野指针
int*p=(int*)0x1100;
cout<<*p<<end1;(读取访问权限冲突)
总结:空指针和野指针都不是我们申请的空间,因此不要访问。


const(常量)修饰指针
int a=10;
int b=10;
int*p=&a;
1、const修饰指针---常量指针
const int*p=&a;(这是一个常量指针)
常量指针特点:指针的指向可以修改,但是指针指向的值不可以修改 
*p=20;错误:指针指向的值不可以改
p=&b;正确:指针指向可以改
2、const修饰常量---指针常量
int*const p=&a;(这是一个指针常量)
指针常量特点:指针的指向不可以改,指针指向的值可以改
*p=20;正确:指向的值可以改
p=&b;错误:指针指向不可以改
3、const即修饰指针,又修饰常量
const int*(指针)const p(常量)=&a;
特点:指针的指向和指针指向的值都不可以改
*p=20//错误
p=&b//错误

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

int arr[10]={1,2,3,4,5,6,7,8,9,10};
cout<<"第一个元素为: “<<arr[0]<<end1;
int*p=arr;//arr数组名就是数组的首地址
cout<<"利用指针来访问第一个元素: "<<*p<<end1;
p++;//让指针向后移4个字节
cout<<"利用指针来访问第二个元素:"<<*p<<end1;
cout<<"利用指针遍历数组"<<end1;
int*p2=arr;
for(int i=0;i<10;i++)
{
    //cout<<arr[i]<<end1;
    cout<<*p2<<end1;
    p2++;
}

 

指针和函数
作用:利用指针作函数参数,可以修改该实参的值//实现两个数字进行交换

viod swap01(int a,int b)
{
    int temp=a;
    a=b;
    b=temp;
    
    cout<<"swap01a="<<a<<end1;
    cout<<"swap02b="<<b<<end1;
}
//1、值传递(将值进行传递)不会改变实参的值
    int a=10;
    int b=20;
    swap01(a,b);
    cout<<"a="<<a<<end1;
    cout<<"b="<<b<<end1;
//2、地址传递(用指针将地址进行传递)
//如果是地址传递,可以改变实参 的值
viod swap02(int*p1,int*p2)
{
    int temp=*p1;
    *p1=*p2;
    *p2=temp;
}
int main()
{
    int a=10;
    int b=20;
    swap02(&a,&b);
    cout<<"a="<<a<<end1;
    cout<<"b="<<b<<end1;
}
总结:如果不想修改实参,就用值传递;如果想修改实参,就用地址传递

指针、数组、函数
案例描述:封装一个函数,利用冒泡排序,实现对整型数组的升序排序
//冒泡排序函数  参数1:数组的首地址;参数2:数组长度
viod bubbleSort(int*arr,int len)
{
    for(int i=0;i<len-1;i++)
    {
        for(int j=0;j<len-i-1;j++)
        {
            //如果j>j+i的值则交换数字
            if(arr[j]>arr[j+1])
            {
                int temp=arr[i];
                arr[j]=arr[j+1];
                arr[j+1]=temp;
            }
        |
    }
}
//打印数组
viodprintArray(int*arr,int len)
{
    for(int i=0;i<len;i++)
    {
    cout<<arr[i[<<end1;
    }
}
int main(){
//1、先创建数组
int arr[10]={4,3,6,9,1,2,10,8,7,5}
//数组长度
int len=sizeof(arr)/sizeof(arr[0]);
//2、创建函数,实现冒泡排序
bubbleSort(arr,len);
//3、打印排序后的数组
    printArray(arr,len);
    system("puase");
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值