自学内容网 自学内容网

C++基础(指针)

C++指针

指针定义语法:数据类型 *指针变量名:

int *p;

解引用:指针前加一个*,可以找到指针指向内存中的数据

指针所占内存空间

#include <iostream>
using namespace std;

//求指针在内存中所占的空间
int main()
{
    int a = 10;
    int *p = &a;
    cout <<"sizeof int*" << sizeof(int *) <<endl;
    cout <<"sizeof char*" << sizeof(char *) <<endl;
    cout <<"sizeof float*" << sizeof(float *) <<endl;
    cout <<"sizeof double*" << sizeof(double *) <<endl;
    cout <<"sizeof string*" << sizeof(string *) <<endl;
}

在这里插入图片描述

空指针和野指针

空指针:指针变量指向内存中编号为0的空间

用法:初始化指针变量

注意:空指针指向的内存是不可以访问的

示例:

#include<iostream>
using namespace std;

int main()
{
    //1.空指针用于给指针变量进行初始化
    int *p = NULL;
    //int *q = (int*)0x1100;
    //2.空指针是不可以进行访问的,因为0~255为系统占用内存,不允许用户访问
    int x = 20;
    printf("%c\n",x);
    //cout << *q << endl;
    return 0;
}

野指针:指针变量指向非法的内存空间

示例:

#include <iostream>
using namespace std;

int main()
{
    int *p = (int *)0x1100;

    //访问野指针报错
    cout << *p << endl;
}

在这里插入图片描述

常量指针

特点:指针的指向可以改,但指针指向的值不可以改

const int *p = 10;//常量指针
*p = 20//错误,指针指向的值不可以改
p = &b//正确,指针指向可以改

指针常量

特点:指针的指向不可以改,指针指向的值可以改

int * const p = 20;
*p = 30;//正确
p = &c;//错误

示例:

#include <iostream>
using namespace std;

int main()
{
    //const修饰指针和常量
    int a = 10;
    const int * const p = &a;
    *p = 30//错误
    p = &b;//错误
    
}

在这里插入图片描述

指针数组

案例:

#include <iostream>
using namespace std;

int main()
{
    int a[] = {11,22,33,44,88,99,77};
    int *p = a;//a是数组首地址
    cout <<"利用指针访问数组第一个元素:" << *p << endl;
    p++;//让指针向后偏移4个字节
    cout << "利用指针访问数组第二个元素:"<< *p << endl;

    cout <<"利用指针遍历数组"<< endl;
    int *p2 = a;
    for(int i = 0;i < 7;i++)
    {
        cout << *p2<<" ";
        p2++;
    }
    cout << endl;


    

}

在这里插入图片描述

指针和函数

作用:利用指针做函数参数,可以修改实参的值

ude <iostream>
using namespace std;


void swap(int *a,int *b)
{
    int temp = *a;
    *a = *b;
    *b = temp;
}



int main()
{
    int m = 20;
    int n = 10;
    swap(&m,&n);
    cout <<"m = " << m <<endl;
cout <<"n= " << n <<endl;
}

在这里插入图片描述
案例

冒泡排序函数

#include <iostream>
using namespace std;

//冒泡排序函数
void maopaopaixu(int *p, int len)
{
    for(int i = 0;i < len -1;i++)
    {
        for(int j = 0;j < len -i -1;j++)
        {
            if(p[j] < p[j+1])
            {
                int temp;
                temp = p[j];
                p[j] = p[j+1];
                p[j+1] = temp;
            }
        }    
    }
}





int main()
{
    //定义一个数组
    int arr[10];
    printf("请输入10个整数\n");
    int len = sizeof(arr)/sizeof(arr[0]);
    for(int i = 0;i < len;i++)
    {
        cin >> arr[i];    
    }
    
    maopaopaixu(arr,len);
    //打印
    for(int i = 0;i < len;i++)
    {
        cout << *(arr+i) << " ";
    }
    cout<<endl;
}

在这里插入图片描述


原文地址:https://blog.csdn.net/jxcklfn/article/details/144447972

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!