当前位置: 首页 > article >正文

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

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <string.h>

//--------------------------------------------------------------------------------------------------------5. 指针和数组
数组:一组相同类型元素的集合
指针变量:是一个变量,存放的是地址

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;
}

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

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. 二级指针
指针变量也是变量,是变量就有地址,那指针变量的地址存放在哪里?
这就是 二级指针 

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. 指针数组
存放指针的数组,就是指针数组
主语是数组

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;
}

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

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;
}


http://www.kler.cn/news/362370.html

相关文章:

  • R语言建模线性回归
  • SpringBoot实现的汽车票在线预订系统
  • 3DMAX碎片生成器插件FragmentGenerator使用方法
  • C++STL之list
  • 前端UI框架
  • Android广播限制Background execution not allowed: receiving Intent { act=
  • CentOS7安装RabbitMQ-3.13.7、修改端口号
  • PHP While 循环
  • 数组扁平化 JS代码实现 + 常用数组方法(未完)
  • C++ 通用数据库操作之 SOCI
  • YOLOv11改进策略【卷积层】| SAConv 可切换的空洞卷积 二次创新C3k2
  • 【建议收藏】大数据Flink入门专栏-v1.0,配套B站视频教程1小时速通
  • 各种数据类型的定义与常规计算
  • 京东 北京 java 中级: 哪些情况下的对象会被垃圾回收机制处理掉? 哪些对象可以被看做是 GC Roots 呢?对象不可达,一定会被垃圾收集器回收么?
  • leetcode hot100【LeetCode 49. 字母异位词分组】java实现
  • 理解多线程中的上下文切换:原理解析与Java模拟实现
  • 2024入门测参考答案(c语言版)
  • C#学习笔记(五)
  • 如何将logism电路转为verilog(一)
  • 【JavaScript】Javascript基础Day02:运算符、分支、循环
  • 从新手到高手:map和set的使用技巧全攻略(C++)
  • 自由学习记录(14)
  • ‌竞赛报名网站毕设计算机毕业设计基于SpringBootSSM框架
  • 第二十七篇:传输层讲解,TCP系列一
  • 内核提供的通用I2C设备驱动I2C-dev.c分析:file_ops篇
  • 10. 异常处理器