1 例子之指向3个字符串的指针数组,易混淆!
1.1过程详解:
char *str[3]={
"Hello,thisisasample!",
"Hi,goodmorning.",
"Helloworld"
};
char s[80];
strcpy(s,str[0]); //也可写成strcpy(s,*str);
strcpy(s,str[1]); //也可写成strcpy(s,*(str+1));
strcpy(s,str[2]); //也可写成strcpy(s,*(str+2));
上例中,str 是一个三单元的数组,该数组的每个单元都是一个指针,这些指针各指向一个字符串。把指针数组名str 当作一个指针的话,它指向数组的第0 号单元,它的类型是char **,它指向的类型是char *。
*str 也是一个指针,它的类型是char *,它所指向的类型是char,它指向的地址是字符串"Hello,thisisasample!"的第一个字符的地址,即'H'的地址。注意:字符串相当于是一个数组,在内存中以数组的形式储存,只不过字符串是一个数组常量,内容不可改变,且只能是右值.如果看成指针的话,他即是常量指针,也是指针常量.
str+1 也是一个指针,它指向数组的第1 号单元,它的类型是char**,它指向的类型是char*。
*(str+1)也是一个指针,它的类型是char*,它所指向的类型是char,它指向"Hi,goodmorning."的第一个字符'H'
1.2 分析:哪里易错
在你提供的代码片段中,char *str[3] 定义了一个包含三个元素的字符指针数组,每个元素都是一个指向字符(char)的指针。这些指针分别初始化为指向三个字符串字面量。
现在我们具体来看 str 和 *str 在这种上下文中的含义:
1 str/*str 的指针类型、指向的类型、内部的值
- 类型:
str是一个指针数组,其类型是char *[3],也就是说它是一个含有三个char *类型元素的数组。 - 值:
str本身代表这个数组的起始地址,即第一个指针str[0]的地址。因此,str可以被视为一个指向char *类型的指针,即char **。 - 使用场景:当你使用
str时,你可以通过索引来访问数组中的各个指针,例如str[0]、str[1]和str[2],它们分别指向不同的字符串。
2 *str 或 str[0]
- 类型:
*str是对str进行一次解引用的结果。由于str是一个char *[3]类型的数组,*str的类型

最低0.47元/天 解锁文章

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



