| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
 本帖最后由 moc 于 2018-8-18 21:41 编辑  
 
1、sizeof + 数组名, 指向数组元素的指针, 指向数组类型的指针 
注意:虽然下面a和pp1,b和pp2的大小和类型都是一样的,但代表的含义不太一样,所以sizeof的结果是不一样的。 
- int a[10];
 
 - printf("a的大小:%d\n", sizeof(a));   //40
 
  
- int *pp1= a;
 
 - printf("pp1的大小:%d\n", sizeof(pp1));  //4
 
  
- int b[2][10];
 
 - printf("b的大小:%d\n", sizeof(b));  //80
 
  
- int(*pp2)[10] = b;
 
 - printf("pp1的大小:%d\n", sizeof(pp2));  //4
 
  复制代码 
 
2、指针数组--求关键字在表中的位置 
- int searcheKeyTable(const char* table[], const int size, const char* key, int *pos)
 
 - {
 
 -         int rv = 0;
 
 -         int i = 0;
 
 -         int inum = 0;
 
 -         if (table == NULL || key == NULL || pos == NULL)
 
 -         {
 
 -                 rv = -1;
 
 -                 printf("func searcheKeyTable:%d", rv);
 
 -                 return rv;
 
 -         }
 
 -         inum = (sizeof(table) / sizeof(*table));   // 数组做函数参数会退化为指针,此时结果为1
 
 -         for (i = 0; i<size; i++)
 
 -         {
 
 -                 if (strcmp(key, table[i]) == 0)
 
 -                 {
 
 -                         *pos = i;
 
 -                         return rv;
 
 -                 }
 
 -         }
 
 -         //没有找到返回-1
 
 -         if (i == size)
 
 -         {
 
 -                 *pos = -1;
 
 -         }
 
 -         return rv;
 
 - }
 
  
- #define DIM(a) (sizeof(a)/sizeof(*a))  // 带参的宏(机械替换即可)
 
 - //DIM(c_keyword)===>  (sizeof(c_keyword)/sizeof(*c_keyword))
 
  
- int main()
 
 - {
 
 -         int inum = 0;
 
 -         int pos = 0;
 
 -         int a[10];
 
 -         int i = 0;
 
 -         char*   c_keyword[] = {
 
 -                 "while",
 
 -                 "case",
 
 -                 "static",
 
 -                 "do",  //编译器会把字符串的首地址存入指针数组
 
 -                 0      // 编译器直接把0存入指针数组,0即NULL, 加在最后指针数组的最后一个指针的值为NULL ,可用于判断数组结束
 
 -         };
 
  
-         for (i = 0; c_keyword[i] != NULL; i++)
 
 -         {
 
 -                 printf("%s\n", c_keyword[i]);
 
 -         }
 
  
-         inum = (sizeof(c_keyword) / sizeof(*c_keyword));   //指针数组未退化前 inum = 4
 
  
-         searcheKeyTable(c_keyword, DIM(c_keyword), "do", &pos);
 
 -         //searcheKeyTable(c_keyword, inum, "do", &pos);
 
 -         printf("pos:%d\n", pos);
 
  
-         searcheKeyTable(c_keyword, DIM(c_keyword), "static", &pos);
 
 -         printf("pos:%d\n", pos);
 
 -         getchar();
 
 -         return;
 
 - }
 
  复制代码 
 
3、main函数的参数 
        main函数是操作系统调用的函数;在程序执行的时候由操作系统向main函数传递参数。 
                argc 命令行参数 
                argv 命令行参数数组 
                env  函数变量数组 
测试代码: 
- int main(int argc, char* argv[], char* env[])
 
 - {
 
 -         int i = 0;
 
 -         printf("agc:%d\n\n\n", argc);
 
  
-         printf("******************* Begin argv *******************\n");
 
 -         for (i = 0; i<argc; i++)
 
 -         {
 
 -                 printf("%s\n", argv[i]);
 
 -         }
 
 -         printf("******************* End argv *******************\n");
 
 -         printf("\n\n\n");
 
  
 
-         printf("******************* Begin env *******************\n");
 
 -         for (i = 0; env[i] != NULL; i++)
 
 -         {
 
 -                 printf("%s\n", env[i]);
 
 -         }
 
 -         printf("******************* End env*******************\n");
 
  
-         getchar();
 
 - }
 
  复制代码 
 
 
 
 |   
 
 
 
 |