c++学习笔记--指针

1.指针变量的定义和使用

#include <iostream>
using namespace std;
#include"swap.h"

int main()
{//定义指针
    int a = 10;
    //指针定义的语法:数据类型*指针变量名
    int* p;
    //让指针记录变量a的地址
    p = &a;
    cout << "a的地址为:" << &a << endl;
    cout << "指针p的地址为:" << p << endl;
    //使用指针
    //可以通过解引用的方式来找到指针指向的内存
    //指针前加*代表解引用,找到指针指向的内存中的数据
    *p = 1000;
    cout << "a=" << a << endl;
    cout << "*p=" << *p << endl;
   
        system("pause");
    return 0;
}

2.指针所占空间内存大小

#include <iostream>
using namespace std;
#include"swap.h"

int main()
{//指针所占内存空间大小
    int a = 10;
    int* p = &a;//这是直接解引用的操作
    //在32为操作系统下,指针是占4个字节空间大小,不管是什么数据类型
     //在64为操作系统下,指针是占8个字节空间大小,不管是什么数据类型
    cout << "sizeof(int*)=" << sizeof(int*)  << endl;
    cout << "sizeof(int*)=" << sizeof(float*) << endl;
    cout << "sizeof(int*)=" << sizeof(char*) << endl;
    cout << "sizeof(int*)=" << sizeof(double*) << endl;
        system("pause");
    return 0;
}

3.空指针和野指针

#include <iostream>
using namespace std;
#include"swap.h"

int main()
{//空指针
    //1.空指针用于给指针变量进行初始化
    int* p = NULL;

    //2.空指针是不可以进行访问的
    //0~255之间的内存编号是系统占用的,因此不可以访问
    //*p=100;运行这条指令会报错,原因如上;
        system("pause");
    return 0;
}
#include <iostream>
using namespace std;
#include"swap.h"

int main()
{//野指针--指针变量指向非法的内存空间
   
    int* p = (int*)0x1100;
    //访问野指针报错
    cout << *p << endl;
   
        system("pause");
    return 0;
}

 总结:空指针和野指针都不是我们申请的空间,因此不要访问你

4.const修饰指针

const int*p=&a;//常量指针--可以修改指向,但不可以修改指向内存中的内容;
int *const p=&a;//指针常量--指针的指向不可以改,指针的指向的值可以改;
const int *const p=&a;//const即修饰指针又修饰常量--指针的指向和指针指向的值都不可以修改

5.指针和数组

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

#include <iostream>
using namespace std;
#include"swap.h"

int main()
{//利用指针访问数组中的元素;
    int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
    int* p = arr;//数组名即为数组的第一个元素的首地址;
    for (int i = 0; i < 10; i++)
    {
        //利用指针遍历整个数组
        cout << *p << endl;
        p++;//它是自动加四个字节,因为这里我们定义的是整型数组
    }

   
        system("pause");
    return 0;
}

6.指针和函数

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

#include <iostream>
using namespace std;
#include"swap.h"
//值传递
void swap1(int a, int b)
{
    int temp = 0;
    temp = a;
    a = b;
    b = temp;

}
//地址传递
void swap2(int* p1, int* p2)
{
    int temp = *p1;
    *p1 = *p2;
    *p2 = temp;
}
int main()
{
    int a = 10;
    int b = 20;
    swap1(a, b);//值传递不会影响实参
    cout << "a=" << a << endl;
    cout << "b=" << b << endl;

    swap2(&a, &b);//地址传递会影响实参
    cout << "a=" << a << endl;
    cout << "b=" << b << endl;
   
        system("pause");
    return 0;
}

总结:如果不想修改实参就用值传递,想修改实参就用地址传递

7.指针,数组,函数案例

案例描述:封装一个函数,利用冒泡排序,实现对整型数组的升序排序

#include <iostream>
using namespace std;
//冒泡排序函数
void bubbleSort(int* arr, int len)
{
    for (int j = 0; j < len - 1; j++)
    {
        for (int i = 0; i < len - j - 1; i++)
        {

            if (arr[i] > arr[i + 1])
            {
                int temp = 0;
                temp = arr[i];
                arr[i] = arr[i + 1];
                arr[i + 1] = temp;
            }

        }
    }
}
//打印数组函数
void printArray(int* arr, int len)
{
    for (int k = 0; k < 10; k++)
    {
        cout << arr[k] << "  ";
    }
}

int main()
{
    int arr[10] = { 4,2,8,9,4,6,1,10,7,5 };
    int len = sizeof arr / sizeof arr[0];
    bubbleSort(arr, len);//注意怎么传输数组数据
    printArray(arr, len);
   
   
        system("pause");
    return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值