• 第32课 数组指针和指针数组分析


    问题思考:

    在二维数组的时候就不能用数组名表达数组首元素了。matrix不再代表数组首元素的地址。

    数组类型:

    int array[5]的类型为int[5],而不是int型。int[5]说明这个数组有5个元素,每个元素类型是int。

    定义数组类型:

    数组指针:

    数组类型和数组指针示例:

     1 #include <stdio.h>
     2 
     3 typedef int(AINT5)[5];
     4 typedef float(AFLOAT10)[10];
     5 typedef char(ACHAR9)[9];
     6 
     7 int main()
     8 {
     9     AINT5 a1;
    10     float fArray[10];
    11     AFLOAT10* pf = &fArray;
    12     ACHAR9 cArray;
    13 
    14     char(*pc)[9] = &cArray;
    15     char(*pcw)[4] = cArray;
    16     
    17     int i = 0;
    18     
    19     printf("%d, %d
    ", sizeof(AINT5), sizeof(a1));
    20     
    21     for(i=0; i<10; i++)
    22     {
    23         (*pf)[i] = i;
    24     }
    25     
    26     for(i=0; i<10; i++)
    27     {
    28         printf("%f
    ", fArray[i]);
    29     }
    30     
    31     printf("%p, %p, %p
    ", &cArray, pc+1, pcw+1);
    32 
    33     return 0;
    34 }

    第15行的类型不匹配,会报警告。

    运行结果如下:

    指针数组:

    工程中的指针数组应用示例:

     1 #include <stdio.h>
     2 #include <string.h>
     3 
     4 #define DIM(a) (sizeof(a)/sizeof(*a))
     5 
     6 int lookup_keyword(const char* key, const char* table[], const int size)
     7 {
     8     int ret = -1;
     9     
    10     int i = 0;
    11     
    12     for(i=0; i<size; i++)
    13     {
    14         if( strcmp(key, table[i]) == 0 )
    15         {
    16             ret = i;
    17             break;
    18         }
    19     }
    20     
    21     return ret;
    22 }
    23 
    24 int main()
    25 {
    26     const char* keyword[] = {
    27             "do",
    28             "for",
    29             "if",
    30             "register",
    31             "return",
    32             "switch",
    33             "while",
    34             "case",
    35             "static"
    36     };
    37     
    38     printf("%d
    ", lookup_keyword("return", keyword, DIM(keyword)));
    39     printf("%d
    ", lookup_keyword("main", keyword, DIM(keyword)));
    40 
    41     return 0;
    42 }

    第6行中的参数const char* table[]就是一个指针数组。和main函数的char * argv[]同理。

     运行结果如下:

    小结:

  • 相关阅读:
    C#代码控制tfs
    WindowService 执行命令
    自定义服务端Script控件支持javascript服务端路径?
    asp.net 实现LRC歌词播放
    asp.net ajax使用方法一
    左右两列布局
    XML反序列化一例
    自定义配置节备忘
    使用WTSGetActiveConsoleSessionId()的VISTA服务与桌面交互
    Java web 学习
  • 原文地址:https://www.cnblogs.com/wanmeishenghuo/p/9539630.html
Copyright © 2020-2023  润新知