鱼C论坛

 找回密码
 立即注册
查看: 1714|回复: 0

[学习笔记] 014-指针数组的用法

[复制链接]
发表于 2018-8-18 14:04:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 moc 于 2018-8-18 21:41 编辑

1、sizeof + 数组名, 指向数组元素的指针, 指向数组类型的指针
注意:虽然下面a和pp1,b和pp2的大小和类型都是一样的,但代表的含义不太一样,所以sizeof的结果是不一样的。
  1. int a[10];
  2. printf("a的大小:%d\n", sizeof(a));   //40

  3. int *pp1= a;
  4. printf("pp1的大小:%d\n", sizeof(pp1));  //4

  5. int b[2][10];
  6. printf("b的大小:%d\n", sizeof(b));  //80

  7. int(*pp2)[10] = b;
  8. printf("pp1的大小:%d\n", sizeof(pp2));  //4
复制代码


2、指针数组--求关键字在表中的位置
  1. int searcheKeyTable(const char* table[], const int size, const char* key, int *pos)
  2. {
  3.         int rv = 0;
  4.         int i = 0;
  5.         int inum = 0;
  6.         if (table == NULL || key == NULL || pos == NULL)
  7.         {
  8.                 rv = -1;
  9.                 printf("func searcheKeyTable:%d", rv);
  10.                 return rv;
  11.         }
  12.         inum = (sizeof(table) / sizeof(*table));   // 数组做函数参数会退化为指针,此时结果为1
  13.         for (i = 0; i<size; i++)
  14.         {
  15.                 if (strcmp(key, table[i]) == 0)
  16.                 {
  17.                         *pos = i;
  18.                         return rv;
  19.                 }
  20.         }
  21.         //没有找到返回-1
  22.         if (i == size)
  23.         {
  24.                 *pos = -1;
  25.         }
  26.         return rv;
  27. }

  28. #define DIM(a) (sizeof(a)/sizeof(*a))  // 带参的宏(机械替换即可)
  29. //DIM(c_keyword)===>  (sizeof(c_keyword)/sizeof(*c_keyword))

  30. int main()
  31. {
  32.         int inum = 0;
  33.         int pos = 0;
  34.         int a[10];
  35.         int i = 0;
  36.         char*   c_keyword[] = {
  37.                 "while",
  38.                 "case",
  39.                 "static",
  40.                 "do",  //编译器会把字符串的首地址存入指针数组
  41.                 0      // 编译器直接把0存入指针数组,0即NULL, 加在最后指针数组的最后一个指针的值为NULL ,可用于判断数组结束
  42.         };

  43.         for (i = 0; c_keyword[i] != NULL; i++)
  44.         {
  45.                 printf("%s\n", c_keyword[i]);
  46.         }

  47.         inum = (sizeof(c_keyword) / sizeof(*c_keyword));   //指针数组未退化前 inum = 4

  48.         searcheKeyTable(c_keyword, DIM(c_keyword), "do", &pos);
  49.         //searcheKeyTable(c_keyword, inum, "do", &pos);
  50.         printf("pos:%d\n", pos);

  51.         searcheKeyTable(c_keyword, DIM(c_keyword), "static", &pos);
  52.         printf("pos:%d\n", pos);
  53.         getchar();
  54.         return;
  55. }
复制代码


3、main函数的参数
        main函数是操作系统调用的函数;在程序执行的时候由操作系统向main函数传递参数。
                argc 命令行参数
                argv 命令行参数数组
                env  函数变量数组
测试代码:
  1. int main(int argc, char* argv[], char* env[])
  2. {
  3.         int i = 0;
  4.         printf("agc:%d\n\n\n", argc);

  5.         printf("******************* Begin argv *******************\n");
  6.         for (i = 0; i<argc; i++)
  7.         {
  8.                 printf("%s\n", argv[i]);
  9.         }
  10.         printf("******************* End argv *******************\n");
  11.         printf("\n\n\n");


  12.         printf("******************* Begin env *******************\n");
  13.         for (i = 0; env[i] != NULL; i++)
  14.         {
  15.                 printf("%s\n", env[i]);
  16.         }
  17.         printf("******************* End env*******************\n");

  18.         getchar();
  19. }
复制代码




本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-27 04:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表