深入理解char ,char * ,char ** ,char a[ ] ,char *a[] 的区别
- char a; 字符变量
定义了一个字符变量a,只能放一个字符,长度是1。 a = “p”; - char a[10]; 字符数组
定义了一个字符数组,长度为10,可以存放长度为10的字符串 a[10] = {"hello "};
a =&a[0]; 数组名就是数组首个元素的地址,数组又是连续的,所以打印字符串,只需printf(数组名) - char * a 字符指针
a = “hello world” 因为在C中,字符串常量就是个指针,所以实际上是把字符串常量的首地址给了指针变量a 这和字符数组有类似之处。 - *char s 4个字节,32位,放指针变量 char a[10] sizeof(a) 是10
- char * a[] *
由于[ ] 的优先级高于* 所以a先和 [ ]结合,他还是一个数组,数组中的元素才是char * ,保存一个地址。
char a[ ] = {“hellow”,“world”,“my”,“friend”}; 44 =16个字节char **s;
char **为二级指针, s保存一级指针 char *的地址,关于二级指针就在这里不详细讨论了 ,简单的说一下二级指针的易错点。
举例:
char *a [ ] = {"China","French","America","German"};
char **s = a;
为什么能把 a赋给s,因为数组名a代表数组元素内存单元的首地址,即 a = &a[0] = 0012FF38;
而 0x12FF38即 a[0]中保存的又是 00422FB8 ,这个地址, 00422FB8为字符串"China"的首地址。
即 *s = 00422FB8 = "China";
部分内容链接自:http://www.imooc.com/article/30475
本文详细介绍了C语言中几种常见的字符类型及其用法:char变量只能存储单个字符,char数组可用于存储字符串,char指针常用于指向字符串常量,而char *[]则可以用来存储多个字符串的地址。通过实例展示了它们的内存分配和使用方式,帮助读者理解这些概念的区别。

被折叠的 条评论
为什么被折叠?



