zoukankan      html  css  js  c++  java
  • 指针数组的简单理解

     1 #include <stdio.h>
     2 /*
     3 研究类型,步长,数组名和二级指针的关系
     4 */
     5 int main(void)
     6 {
     7     char *p[4] = {"1234","sq34","d234","4234"};
     8     //万变不离其中:数组名 == 首元素的地址
     9     //1.整体研究
    10     printf("sizeof(p) = %d
    ",sizeof(p));//p是数组名,作为整体,p返回的是数组的长度。16字节
    11     printf("&p = %p	&p+1 = %p
    ",&p,&p+1);//对数组名引用,它的类型发生变化由char ** 变成了char **[4]类型,所以+1是加了16字节
    12     printf("sizeof(&p) = %d	sizeof(char *[4]) = %d
    ",sizeof(&p),sizeof(char **[4]));
    13     printf("p = %p	p+1 = %p
    ",p,p+1);
    14     printf("*p = %s	sizeof(*p) = %d
    ",*p,sizeof(*p));//指针数组里面的每个元素都是个指针,所以每个元素占用4个字节
    15     printf("*p = %s	**p = %c
    ",*p,**p);//*p代表字符串的首地址,**p就代表字符串的第一个字符
    16     //指针数组名和二级指针是等价的
    17     char **q = p;//能这样写的原因:p = &p[0]  而p[0]是个指针,是char *类型,所以 p是 char **类型,是指向指针的指针,是个二级指针
    18     printf("*q = %s
    ",*q);
    19     //2.单独元素研究
    20     printf("p[0] = %s,sizeof(p[0]) = %d
    ",p[0],sizeof(p[0]));//p[0]代表数组的第一个元素,而第一个元素是一个指向data区ro段的指针。
    21     printf("*p[0] = %c	p[0][0] = %c
    ",*p[0],p[0][0]);//p[0]代表第一个元素,而第一个元素是一个字符串(可以理解成一个字符数组)
    22                                                        //所以p[0]就是字符串的首地址,*p[0]就代表第一个字符
    23     printf("*(p[0]+1) = %c
    ",*(p[0]+1));//p[0]代表第一个字符串的首地址,地位相当于一维数组名,所以+1加的是1个字节。下面测试
    24     printf("p[0] = %p	p[0]+1 = %p
    ",p[0],p[0]+1);//测试
    25     //整体访问
    26     for(int i = 0;i<4;i++)
    27     {
    28         printf("%s
    ",p[i]);
    29     }
    30     //单独访问一个字符串中的元素
    31     for(int j = 0;j<sizeof(p[0]);j++)
    32     {
    33         printf("%c	",*(p[0]+j));//或者:printf("%c	",*(*p+j));
    34     }
    35     putchar(10);
    36     /*
    37     总结:1.指针数组本质上就是一个数组,只不过这个数组里面放的都是指针而已。
    38           2.二级指针和指针数组名是等价的关系。
    39     */
    40     
    41     return 0;
    42 }
  • 相关阅读:
    网络嗅探器
    struct udphdr
    struct tcphdr
    struct iphdr
    socket函数
    SQL SERVER-解析Extendevent文件数据
    SQL SERVER-日期按时区转换
    SQL SERVER-CROSS APPLY
    WinServer-文件共享端口
    SQL SERVER-修改实例的排序规则
  • 原文地址:https://www.cnblogs.com/wangchaomahan/p/9936845.html
Copyright © 2011-2022 走看看