鹏哥C语言81-82---指针和数组+二级指针+指针数组

#define _CRT_SECURE_NO_WARNINGS

cpp 复制代码
#include <stdio.h>
#include <string.h>

//--------------------------------------------------------------------------------------------------------5. 指针和数组

数组:一组相同类型元素的集合

指针变量:是一个变量,存放的是地址

cpp 复制代码
int main()
{
    int arr[10] = { 1,2,3,4,5, 6,7,8,9,0 };
    //arr 数组名是首元素地址(两种例外)
    //&arr[0] 也是首元素地址
    printf("%p\n", arr);
    printf("%p\n", &arr[0]);
    //通过指针访问数组
    int* p = arr;
    int sz = sizeof(arr) / sizeof(arr[0]);
    int i = 0;
    for (i = 0; i < sz; i++)
    {
        printf("%d ", *(p + i)); 
        //p指向第一个元素,每次让他+1,因为是int* 类型的指针变量,所以+1一次,跳过4个字节,指向下一个元素
    }
    printf("\n");

    for (i = 0; i < sz; i++)
    {
        printf("%p---------%p\n", &arr[i], p + i);
        //验证了地址完全相同
    }

    return 0;
}

//函数--数组--指针

cpp 复制代码
test(int* arr, int sz)
{
    int i = 0;
    for (i = 0; i < sz; i++)
    {
        printf("%d ", *(arr + i));
    }
}

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

}

//-----------------------------------------------------------------------------------------------------6. 二级指针

指针变量也是变量,是变量就有地址,那指针变量的地址存放在哪里?

这就是 二级指针

cpp 复制代码
int main()
{
    int a = 10;
    
    
    int* pa = &a; // pa 是一个指针变量,一级指针变量
    // int 表示 pa 指向的对象的类型是 int 类型
    //  * 表示 pa 是指针变量
    *pa = 20;
    printf("%d\n", a); //20
    

    int** ppa = &pa; // 二级指针,存放 pa 的地址
    // int* 代表 ppa 指向的对象的类型是 int*
    //      * 代表 ppa是指针变量
    //  *ppa; //pa
    //  **ppa; //a
    **ppa = 30;
    printf("%d\n", a); //30

    return 0;
}

//总结:二级指针变量 是用来 存放一级指针变量的地址 的//------------------------------------------------------------------------------------------------------7. 指针数组

存放指针的数组,就是指针数组

主语是数组

cpp 复制代码
int main()
{
    int a = 10;
    int b = 20;
    int c = 30;
    
    //int arr[10] = { 0 };

    //int* pa = &a;
    //int* pb = &b;
    //int* pc = &c;
    
    //parr 存放指针的数组,就是指针数组
    int* parr[] = {&a, &b, &c};

    int sz = sizeof(parr) / sizeof(parr[0]); 
    int i = 0;
    for (i = 0; i < sz; i++)
    {
        printf("%d ", *(parr[i]));
    }
    
    return 0;
}

//指针数组模拟二维数组

cpp 复制代码
int main()
{
    int arr[3][4] = { 1,2,3,4,2,3,4,5,3,4,5,6 };
    // 1 2 3 4
    // 2 3 4 5
    // 3 4 5 6
    int i = 0;
    int j = 0;
    //标准的二维数组打印
    for (i = 0; i < 3; i++)
    {
        for (j = 0; j < 4; j++)
        {
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }
    printf("\n");

    //指针数组 模拟二维数组
    int arr1[4] = { 1,2,3,4 };
    int arr2[4] = { 2,3,4,5 };
    int arr3[4] = { 3,4,5,6 };

    int* parr[3] = { arr1,arr2,arr3 };
    
    int x = 0;
    int y = 0;
    for (x = 0; x < 3; x++)
    {
        for(y=0;y<4;y++)
        {
            printf("%d ", parr[x][y]);
        }
        printf("\n");
    }

    return 0;
}
相关推荐
saltymilk13 小时前
C++ 模板参数推导问题小记(模板类的模板构造函数)
c++·模板元编程
感哥14 小时前
C++ lambda 匿名函数
c++
沐怡旸20 小时前
【底层机制】std::unique_ptr 解决的痛点?是什么?如何实现?怎么正确使用?
c++·面试
感哥20 小时前
C++ 内存管理
c++
聚客AI20 小时前
🙋‍♀️Transformer训练与推理全流程:从输入处理到输出生成
人工智能·算法·llm
大怪v1 天前
前端:人工智能?我也会啊!来个花活,😎😎😎“自动驾驶”整起!
前端·javascript·算法
惯导马工1 天前
【论文导读】ORB-SLAM3:An Accurate Open-Source Library for Visual, Visual-Inertial and
深度学习·算法
骑自行车的码农1 天前
【React用到的一些算法】游标和栈
算法·react.js
博笙困了1 天前
AcWing学习——双指针算法
c++·算法
感哥1 天前
C++ 指针和引用
c++