|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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();
- }
复制代码
|
|