zoukankan      html  css  js  c++  java
  • 复习一下整型数组,字符数组,整型指针数组,字符指针数组,整型数组指针,字符数组指针

    复习一下整型数组,字符数组,整型指针数组,字符指针数组,整型数组指针,字符数组指针

    20:52:01 2019-12-31

    整型数组 int a[10];
    字符数组 char b[10];     

                                           _______________________
    整型指针数组 int *p[10]; |__|__|__|__|__|__|__|__|__| 每个格子里存的是一个指针,每个指针都是int类型的,会指向一个int的值.

    1 for(int i=0; i<10; i++)
    2   p[i] = &a[i];    //把a中的每个元素的地址都放在了指针数组p里.
    3 
    4 for(int j=0; j<10; j++)
    5   printf("%d ", *(p[i]));//把p中的地址转化为真实的内容,也就是使用*对地址取值.

     字符指针数组 char *c[10]; 和上面一样,每个指针都是char类型的,会指向一个char

    下面这两个是等式.表示左右两边的值是相等的

    a == &a[0]
     

    重点说说数组指针

    整型数组指针 int (*P)[10]; p是一个指针,这个指针指向一个有10个格子的数组.这个10个格子里存的都是int类型的东西

    int a[10];
    int (*p)[10];
    p = a;
    p = &a;
    

     

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 
     4 int main() {
     5 
     6     int a[10] = {1,2,3,4,5,6,7,8,9,10};
     7     int (*p)[10];
     8     p = &a;        //这种写法才是正确 且没有错误的
     9     //p = a;  这种写法会给警告.虽然我们知道数组的名字也可以被用作数组的首地址.
    10     int i = 0;
    11     for(i=0; i<10; i++)
    12         printf("%d ", p[0][i]);        //这里的p其实是指向一个二维数组的首地址,但是实际上指向的是一个一位数组,所以p[0][0]就是这个数组a的a[0]了.
    13                                     //这里的p[0][i]就是遍历数组的第一行.
    14     /*
    15     上面的p = &a;这句话其实就是将p[0]指向了a[10]  所以p[0][i]只需要对i++即可操作a[i]了.
    16     p[0]-> [p00][p01][p02][p03][p04][p05][p06][p07][p08][p09] 第1 行  
    17     p[1]-> [p10][...][...][...][...][...][...][...][...][...] 第2 行
    18     p[2]-> [p20][...][...][...][...][...][...][...][...][...] 第3 行
    19     p[3]-> [p30][...][...][...][...][...][...][...][...][...] 第4 行
    20     p[4]-> [p40][...][...][...][...][...][...][...][...][...] 第5 行
    21     p[5]-> [p50][...][...][...][...][...][...][...][...][...] 第6 行
    22     p[6]-> [p60][...][...][...][...][...][...][...][...][...] 第7 行
    23     p[7]-> [p70][...][...][...][...][...][...][...][...][...] 第8 行
    24     p[8]-> [p80][...][...][...][...][...][...][...][...][...] 第9 行
    25     p[9]-> [p90][...][...][...][...][...][...][...][...][p99] 第10行
    26     经过上面这个表,就能够知道这个数组指针p是一个怎样的指针了. 数组指针p竟然是一个二维指针.
    27     */
    28 
    29     return 0;
    30 }

    字符数组指针 char (*c)[5];
    这句话中只有c这个符号是我们自己写的,其他的符号C编译器都认识.
    所以我们来品品c是什么应该怎么读.
    c是一个指针,这个指针指向一个 长度为5 的里面存着 字符 的数组


    按照这样的读法,那么int (*p)[10];也很好读了
    p是一个指针,这个指针指向一个 长度为10 的里面存着 整型数字 的数组

  • 相关阅读:
    每天一个linux命令(8):scp使用
    C++11 列表初始化
    国外程序员整理的C++资源大全
    fiddler4 使用教程
    C++11 右值引用和转移语义
    数据库炸了——是谁动了我的wait_timeout
    Go组件学习——gorm四步带你搞定DB增删改查
    Go组件学习——cron定时器
    Go语言学习——channel的死锁其实没那么复杂
    Go语言学习——彻底弄懂return和defer的微妙关系
  • 原文地址:https://www.cnblogs.com/dhu121/p/12127390.html
Copyright © 2011-2022 走看看