指针及其应用

文章介绍了C++中的指针基础知识,包括如何定义和使用指针,指针的内存占用,空指针和野指针的概念,以及常量指针和指针常量的差异。此外,还展示了指针在操作数组和在函数参数传递中的作用,如数组排序和值交换。
摘要由CSDN通过智能技术生成

概念

通过指针间访问内存

定义指针

int a = 10;
//指针定义的语法:数据类型 *指针变量名;
int *p;
//让指针记录变量a的地址
p = &a
//& 为取值符

//此时让
*p = 1000
cout<<*p<<endl;
cout<<a<<endl;
//输出结果均为1000

//精简
int *p = &a;

内存空间

在32位操作系统下指针占用4个内存空间(x86)

在64位操作系统下指针占用8个内存空间

cout<<"sizeof(int *)"<<sizeof(p)<<endl;

输出结果

cout<<sizeof(float *)<<endl;
cout<<sizeof(char *)<<endl;
cout<<sizeof(double *)<<endl;
cout<<sizeof(int *)<<endl;

输出结果均为4

空指针

给指针变量进行初始化

int *p = NULL

//nullptr:空指针的关键字

空指针不可访问

野指针

int *p = (int*)0x0001;
//(int *:强转为地址数据类型)
//野指针为指定一个没有权限的空间

const

定义:常量

第一种:常量指针
const int *p = &a

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

第二种:指针常量
int *const p =&a

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

第三种

const int *const p =&a

特点:指针指向的地址和值都不可以更改

指针和数组

int arr[5] = {1,2,3,4,5};
int *p = arr;
cout<<"用指针输出第一个元素"<<*p<<endl;
p++;//让指针向后偏移4个字节
cout<<"指针输出第二个元素"<<*P<<endl;

指针和函数

#include<iostream>
using namespace std;


void change(int* p1, int* p2)
{
    int temp = *p1;
    *p1 = *p2;
    *p2 = temp;
}

int main(void)

{
    int a = 10;
    int b = 20;
    cout << a << endl;
    cout << b << endl;
    change(&a, &b);
    cout << "转换后:" << endl;
    cout << a << endl;
    cout << b << endl;
}

转换过程没有改变实参

函数、数组和指针结合

#include<iostream>
using namespace std;

void bubbleSort(int*arr, int len)
{
    for (int i = 0; i < len-1; i++)
    {
        for (int j = 0;j<len-i-1 ; j++)
        {
            if (arr[j] > arr[j + 1])
            {
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            };
        }
    }
}

void printArray(int*arr,int len) {
    for (int k = 0; k < len; k++) 
    {
        cout << arr[k] << endl;
    }

}

int main() {
    int arr[10] = {5,6,1,7,9,2,4,3,1,9};
    int len = sizeof arr / sizeof arr[0];

    bubbleSort(arr,len);
    printArray(arr,len);
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值