1、
#include <stdio.h> int main() { char *str1 = "abcd\n"; char str2[10] = "abcd\n"
;char str3[][10] = {"abcd\n",""}; char *str4[] = {"abcd\n",""}; printf(
"%d\n%d\n%d\n%d\n", sizeof(str1),sizeof(str2),sizeof(str3),sizeof(str4)); } 
输出 
 8 
 10 
 20 
 16
str1是一个指针,64位系统里指针大小为8个字节,32位为4个字节 
 str2为一个数组,sizeof计算数组大小,跟字符串无关 
 str3为一个二维数组,同样是计算数组大小 
 str4为一个指针数组,也就是里面都是指针,2个指针也就是16个字节
2、 
 7条线可以把平面分成几个部分
29个部分,(n * n + n + 2) / 2
3、
#include <stdio.h> #include <stdlib.h> #include <string.h> union my { int 
intVal;char charVal[4]; }; int main() { my test; test.intVal = 0x12345678; 
test.charVal[1] = 0x22; printf("%x", test.intVal); return 0; } 
输出 
12342278,不是12225678 
 12345678在内存中是从高位到低位 
 a[0]: 78 
 a[1]: 56 
 a[2]: 34 
 a[3]: 12
因此charVal[1]该的是56,所以就有上面的结果
例如
以十进制为例, 10^0肯定是最低位——个位 10^1高一点点——十位 10^2更高一点——百位 
 我们书写从高位到低位,百十个,内存是反向的,个十百
4、
#include <stdio.h> int main() { char c[100] = "abc\0def"; printf("%c", c[4]); }
输出d 
\0是一个字符,也就是结束标记 
 printf(“%s”, c); 
 会输出abc
热门工具 换一换
