鹏哥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;
}
相关推荐
CodeClimb4 分钟前
【华为OD-E卷-木板 100分(python、java、c++、js、c)】
java·javascript·c++·python·华为od
CT随14 分钟前
Redis内存碎片详解
java·开发语言
anlog24 分钟前
C#在自定义事件里传递数据
开发语言·c#·自定义事件
奶香臭豆腐37 分钟前
C++ —— 模板类具体化
开发语言·c++·学习
游是水里的游42 分钟前
【算法day19】回溯:分割与子集问题
算法
不想当程序猿_43 分钟前
【蓝桥杯每日一题】分糖果——DFS
c++·算法·蓝桥杯·深度优先
晚夜微雨问海棠呀44 分钟前
长沙景区数据分析项目实现
开发语言·python·信息可视化
graceyun1 小时前
C语言初阶习题【9】数9的个数
c语言·开发语言
cdut_suye1 小时前
Linux工具使用指南:从apt管理、gcc编译到makefile构建与gdb调试
java·linux·运维·服务器·c++·人工智能·python
南城花随雪。1 小时前
单片机:实现FFT快速傅里叶变换算法(附带源码)
单片机·嵌入式硬件·算法