zoukankan      html  css  js  c++  java
  • 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
    ", 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
    ", *(pin + i));
            printf("[]--%s
    ", 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
    ", sizeof(myarr));// 打印 16  sizeof(char *) * 4=16(元素个数)
        PrintArr(myarr, 4);
        system("pause");
    }

  • 相关阅读:
    mapreduce 本地调试需要注意的问题
    socket-----爬虫&&文件传输
    多个地点ping服务器
    linux grep命令详解
    关于真多核和加多核&线程由哪几部分组成
    内存溢出和内存泄漏
    指针和引用的区别
    Doxygen的使用,配置及实例
    【转】doxygen+graphviz生成工程中的类继承树及函数调用图
    转载--void指针(void *的用法)
  • 原文地址:https://www.cnblogs.com/zhanggaofeng/p/5361861.html
Copyright © 2011-2022 走看看