C语言 二级指针内存模型

Posted 庖丁解牛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言 二级指针内存模型相关的知识,希望对你有一定的参考价值。

 

//二级指针第一种内存模型

#include<stdio.h>
#include<stdlib.h>

//说明:①:类似于int a[5]={0},数组名a是一维数组a中首元素的指针;(我自认为此假设可应用于多维数组与指针)
//二级指针的主要功能是修改一级指针的值

//打印一维数组
int PrintArr(char **pin, int num){
    int ERRO_MSG = 0;
    if (pin == NULL)
    {
        ERRO_MSG = 1;
        printf("pin==NULL erro msg:%d\\n", ERRO_MSG);
        return ERRO_MSG;
    }
    //打印二级指针数组
    int i = 0;
    for (i = 0; i < num; i++)
    {
        //pin是一维数组首元素的指针,每个元素都是一个指针,pin的类型是指针类型
        //所以pin的步长是4个字节,
        //pin + i是第i个元素的指针,第i个元素的值就是*(pin + i),这个元素是指针
        //指针的步长只与指针的类型有关系
        //例子: int a[5]={0};  a是数组首元素的指针,a的类型是 int * a;
        //&a是数组指针(C语言语法规定);&a的类型是 int (* p)[5]--一个指向数组的指针类型
        //int (* p)[5] 是个指针类型  明确这一点  和int * p[5]是完全不同的两种类型
        //后面的章节会详解
        printf("*--%s\\n", *(pin + i));
        printf("[]--%s\\n", pin[i]);
    }
    return ERRO_MSG;
}

void main(){
    //第一种使用方式
    //[]的优先级高于 *
    //因此char * myarr[] 首先是一个一维数组,
    //char *表明这个一维数组里每个元素的数据类型是 char *,(字符指针)
    //myarr是数组名,[]是数组的大小
    //myarr表示的是数组首元素的指针(不是首元素的值)
    //本数组首元素是一个指针a,那么myarr就是指针a的指针,也就是myarr是一个二级指针
    char * myarr[] = { "aaabsdafa", "bbb", "ccc", "ddd" };
    //C语言规定 sizeof(数组名)  得到的是整个数组的大小  
    printf("%d\\n", sizeof(myarr));// 打印 16  sizeof(char *) * 4=16(元素个数)
    PrintArr(myarr, 4);
    system("pause");
}

 

 

以上是关于C语言 二级指针内存模型的主要内容,如果未能解决你的问题,请参考以下文章

C 语言结构体 ( 结构体中嵌套二级指针 | 为 结构体内的二级指针成员 分配内存 | 释放 结构体内的二级指针成员 内存 )

C 语言二级指针 内存模型图 ( 指针数组 | 二维数组 | 自定义二级指针内存 )

C语言提高内容目录

C语言提高: 二级指针的输入输出

C语言提高: 二级指针的输入输出

C 语言二级指针作为输出 ( 指针输入 | 指针输出 | 二级指针 作为 函数形参 使用示例 )