字符指针及字符串

以下需要明白的几点:
1> c中是没有字符串类型的,它经常是以数组的形式来存储的。
2>字符指针可以存储字符串的起始地址,也就是指针指向字符串的第一个字符。
代码如下:
int main(int argc, char *argv[]) {

char s1[]=“qwertasd”;
char s2[]=“qwertasd”;
char *p;

p=s1;
if(isalpha(*p)){
if(isupper(*p)){
*p=tolower(*p);
}else
*p=toupper(*p);

}
printf("%p %s\n",p,p);

p=s2;
printf("%p %s\n",p,p);
return 0;
}
运行结果如上
1>对于相同内容的字符串,放于不同的数组中,他们的地址是不同的。
2>指针的调用不是固定的,你可以在一个函数中让同一指针去接连指向不同的位置。
本代码中的s1,s2变量是局部变量,局部变量放在栈上,局部变量的值可以可以根据我们的需要进行修改。可自动分配自动回收。

思考:我们不妨不用指针指向存储字符串的数组,而是用指针直接指向字符串本身。
当一个字符指针指向一个字符串常量时,字符串常量与全局变量static一样的,它放在内存中的一个固定位置的,当程序结束时回收。
指针直接指向字符串常量,就相当于指针存储字符串常量的起始地址,所以不可以用指针更改字符串的内容。
代码:
char *p1=“qwertasd”;
char *p2=“qwertasd”;
printf("%p %s\n",p1,p1);
printf("%p %s\n",p2,p2);

结果如图
我们可以看出两个指针指向同一个字符串常量,他们的地址时相同的。
注意:1>全局变量2>static修饰的局部变量3>字符串常量 整个c语言中关于变量的处理,只有以上三种情况下,你的数据是放在静态区(程序结束后才释放)的,一旦分配以后,永远占内存。

猜你喜欢

转载自blog.csdn.net/qq_36942291/article/details/86557466