• 指针知识梳理9-指针数组


    1、基本概念
    指针数组:本质是数组。数组的每一个元素是指针,数组的每一个元素能够存储地址。

    2、基本定义
    (1)先回想,数组定义基本模型
    type a[len];
    訪问 数组的每一个成员用 a[i];
    每一个成员所占内存大小 sizeof(type);
    数组总共占内存大小  sizeof(a) = sizeof(type)*len;
    (2)指针数组
    假设学会了指针,学会了数组,到了这里就是一个综合应用的问题。


    依照以上模型:
    ----------------------------------------------------------------
    type 为 char*
    char* a[5];
    定义数组a,数组每一个元素的类型为 char*。存储地址,a[i]占4个字节。
    那么能够写例如以下代码:
    char b;
    char c[10];
    a[0] = "hello";
    a[1] = (char*)malloc(5);
    a[2] = &b;
    a[3] = &c[0];

    a[4] = c;



    ------------------------------------------------------------------
    type 为 int*
    int* a[5];
    定义数组a,数组每一个元素的类型为 int*,存储地址,a[i]占4个字节。
    int b;
    int c[10];
    a[0] = &b;
    a[1] = (int*)malloc(sizeof(int)*5);
    a[2] = &c[0];

    a[3] = c; 

    请画内存图


    3、综合一维数组名的含义
    參照1,指针与一维数组:http://blog.csdn.net/xiaoliu0518/article/details/32710665
    參照2,指针的指针:http://blog.csdn.net/xiaoliu0518/article/details/33329833
    模型:
    type a[10];
    type *p;
    p+i  偏移的地址是 i*sizeof(type)
    p = &a[0];
    p = a;
    *(p+i) = p[i];
    *(a+i) = a[i];
    --------------------------------------------------
    假设type为char
    char a[10];
    char* p;
    p = a;
    p+i 地址偏移 i个字节,*(p+i)訪问1个字节
    ---------------------------------------------------
    假设type为char*
    char* a[10];
    char** p;
    p = a;
    p+i 地址偏移 4*i个字节。*(p+i)訪问4个字节

    3、综合应用
    #include <stdio.h>
    int main()
    {
    	
    	char *a[5];
    	char b[10] = "lilei";
    	char c[10];
    	char d = 'm';
    	char **p = a;
    	a[0] = "hello";
    	a[1] = (char*)malloc(5);
    	//安全检查。。

    a[2] = b; a[3] = c; a[4] = &d; strcpy(a[1],"bye"); strcpy(a[3],a[2]); for(i = 0;i<4;i++) { printf("a[%d] : %s ",i,a[i]); printf("a[%d] : %s ",i,p[i]); printf("a[%d] : %s ",i,*(p+i)); } printf("a[4]:%c ",*a[4]); printf("a[4]:%c ", *(*(p+4)) ); }




    刚開始学习的人一定要多写多练。








  • 相关阅读:
    Windows下做7层软负载方案分析
    蛙蛙推荐:C语言入门之二——编写第一个有意义的小程序
    蛙蛙推荐:C语言入门之一——Linux下的C开发环境搭建小节
    蛙蛙推荐:动手做个网页游戏五子棋
    学习园地:微博项目
    com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field 异常 规格严格
    PostgreSQL Update 根据B表更新A表 规格严格
    SQL 删除重复数据[转] 规格严格
    ntoskrnl.exe占用cpu高 规格严格
    PostgreSQL中RECURSIVE递归查询使用总结[转] 规格严格
  • 原文地址:https://www.cnblogs.com/ldxsuanfa/p/10673310.html
  • Copyright © 2020-2023  润新知