C语言中char*和char[]的区别
char *c
: char型指针,只表示所指向的内存单元char []
: 表示数组型的内存单元
结论: char a[]
或char a[0]
形式的定义在结构体
中不占内存大小。
以下所有测试在64bit
系统中进行,结果与32bit系统存在差别。
1 |
|
- 运行:
1
2
3
4
5
6
7
8
9
10
11
12
13System Data Width:
sizeof int(4), int*(8), char(1), char*(8)
c1: a b c d
c2: a b c d
c1-c1[0]=a
c2-c2[0]=a
c1-c1[0]=a
c2-c2[0]=y
sc1: sizeof-char* = 16
sc2: sizeof-char[] = 1
sc2_1: packed sizeof-char[0] = 1
sc3: packed sizeof-char* = 9
sc4: packed sizeof-char[] = 1
内存地址对比
1 | struct sc1 sc1_a; |
- 运行结果:
1
2
3
4
5
6
7sc1_a addr: 0x7ffd44ed7d60
sc1_a.a addr: 0x7ffd44ed7d60
sc1_a.b addr: 0x7ffd44ed7d68
sc2_a addr: 0x7ffd44ed7d7e
sc2_a.a addr: 0x7ffd44ed7d7e
sc2_a.b addr: 0x7ffd44ed7d7f
sc2_b addr: 0x7ffd44ed7d7f
- 在结构体中使用
char buf[]
形式的定义,不占用内存空间
应用
内核部分结构体:如MMC中sdhci的结构体定义
1 | struct sdhci_host { |
利于将自定义结构体部分和公共结构体之间相关联。
自定义结构体:
1 | struct sdhci_custom { |