鹏哥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;
}
相关推荐
herinspace4 分钟前
管家婆实用贴-如何分离和附加数据库
开发语言·前端·javascript·数据库·语音识别
ILYT NCTR30 分钟前
搭建Golang gRPC环境:protoc、protoc-gen-go 和 protoc-gen-go-grpc 工具安装教程
开发语言·后端·golang
叶小鸡36 分钟前
小鸡玩算法-力扣HOT100-堆
数据结构·算法·leetcode
小雅痞37 分钟前
[Java][Leetcode simple] 28. 找出字符串中第一个匹配项的下标
java·开发语言·leetcode
likerhood41 分钟前
java中的不可变类(Immutable)
java·开发语言
Ulyanov1 小时前
《PySide6 GUI开发指南:QML核心与实践》 第一篇:GUI新纪元——QML与PySide6生态系统全景
开发语言·python·qt·qml·雷达电子对抗
dgaf1 小时前
谢谢 AI (打靶测试用文)
c语言·gpt·ai编程·d3d12
何陋轩1 小时前
【重磅】悟空来了:国产AI编程助手深度测评,能否吊打Copilot?
人工智能·算法·面试
Rust研习社1 小时前
从入门到实践:Rust 异步编程完全指南
开发语言·后端·rust
yaoxin5211231 小时前
389. Java IO API - 获取文件名
java·开发语言·python