-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
用字符串座位研究对象:
定义两个字符串指针:
char *str = "abcdefg";
char *str1[] = {"adv","fegb","dfew"};
str其实相当于一维数组,str1相当于是一维数组。
分析一维字符为数组
int main(){
char *str = "abcdefg";
printf("str的地址是: %p\n",str);
printf("&str[0]的地址时:%p\n",&str[0]);
printf("&*str的地址是: %p\n",&*str);
printf("&str的地址时: %p\n",&str);
}
结果如下:
str的地址是: 0x100000f22
&str[0]的地址时:0x100000f22
&*str的地址是: 0x100000f22
&str的地址时: 0x7fff5fbff858
分析得出:str是数组首元素的地址,也就是a的地址,因此同&str[0]的地址是一样的,都是指向数组中首元素字母a的存储地址。
&*str是相当于也是&a的地址,只不过是进行了更多一步的计算。
&str不同与其它三个是因为,&str其实是取了指针变量str的地址,因此不同。
输出方式:
int main(){
char *str = "abcdefg";
printf("用*str的输出首字母: %c\n",*str);
printf("用*str的输出首字母: %c\n",str[0]);
printf("用*str的输出第二个字母: %c\n",*(str+1));
printf("用*str的输出第二个字母: %c\n",str[1]);
}
显示结果如下:
用*str的输出首字母: a
用*str的输出首字母: a
用*str的输出第二个字母: b
用*str的输出第二个字母: b
分析:因为str所指向的是地址,所以+1对于char类型来说,是向下移了一个字节,所以才能输出第二个字母。
注意:如果没有括号,是*str+1的话,那么就会再*str的结果上加上数字1.