摘要: #include <stdio.h>void foo(const char **p);int main(){ char ch[2][20] = { "Hello world", "Hi"}; char** p = (char**)ch; foo(p); return 0;}void foo(const char **p, int n){}Error 1 error C2664: 'foo' : cannot convert parameter 1 from 'char **' to 'const cha 阅读全文
posted @ 2012-12-10 17:57 Anbit自由之路 阅读(909) 评论(0) 推荐(0) 编辑
摘要: #include <stdio.h>int main(){ int i = 1; unsigned int j = -1; int kk = i + j; unsigned int kkk = i + j; printf("%d %u\n", kk, kkk); if(-1 < (unsigned char)1) { printf("-1 < 1\n"); } else { printf("-1 > 1\n"); } if(i < j) { printf("1 < -1\n" 阅读全文
posted @ 2012-12-10 17:57 Anbit自由之路 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 《Expert C Programming》中花了两篇写了数组与指针,这里将其中的一个图记录一下,也算是平时编程稍不注意就会产生bug的地方。不同点: 1.声明的时候,如extern char a[],不能改写成指针的形式; 2.定义的时候,如char a[10],不能改写成指针的形式;相同点: 1.函数的参数,可以是func(char a[]),也可以是func(char * a),因为数组名被编译器当作指向该数组第一个元素的指针; 2.表达式中,可以是c = a[i]; 也可以是 c = *(a + i);数组的下标总是与指针的偏移量相同。如果你喜欢数组的下标从1到N,可以传入数组前面的一 阅读全文
posted @ 2012-12-10 17:56 Anbit自由之路 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 最近看《Expert C Programming》,有不少收获,现在记录下面一点:复杂的类型转换如下:1.一个对象的声明,它的类型就是想要转换的结果类型;2.删去标识符(以及任何如extern之类的存储限定符),并把剩余的内容放在一对括号里;3.把第2步产生的内容放在需要进行类型转换的对象的左边。来两个例子:经常使用的qsort()函数:void qsort(void base, size_t nel, size_t width, int(*compar)(const void*, const void*));其中,我们会经常传入自己设计的比较函数,但接收的参数类型往往不是void*类型,就像 阅读全文
posted @ 2012-12-10 17:55 Anbit自由之路 阅读(158) 评论(0) 推荐(0) 编辑