鹏哥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;
}
相关推荐
wen__xvn6 分钟前
每日一题洛谷P8664 [蓝桥杯 2018 省 A] 付账问题c++
c++·职场和发展·蓝桥杯
旧识君12 分钟前
移动端1px终极解决方案:Sass混合宏工程化实践
开发语言·前端·javascript·前端框架·less·sass·scss
手握风云-18 分钟前
优选算法的妙思之流:分治——快排专题
数据结构·算法
熬夜苦读学习26 分钟前
Linux进程信号
linux·c++·算法
郝YH是人间理想28 分钟前
OpenCV基础——傅里叶变换、角点检测
开发语言·图像处理·人工智能·python·opencv·计算机视觉
白白糖29 分钟前
二叉树 递归
python·算法·力扣
Tiger Z31 分钟前
R 语言科研绘图第 36 期 --- 饼状图-基础
开发语言·程序人生·r语言·贴图
jyyyx的算法博客40 分钟前
Leetcode 857 -- 贪心 | 数学
算法·leetcode·贪心·嗜血
揣晓丹41 分钟前
JAVA实战开源项目:校园失物招领系统(Vue+SpringBoot) 附源码
java·开发语言·vue.js·spring boot·开源
榆榆欸42 分钟前
14.主从Reactor+线程池模式,Connection对象引用计数的深入分析
linux·服务器·网络·c++·tcp/ip