用debug调试观察变量信息 总结:字符数组与字符指针对字符串处理的区别
字符串常量 特点:exe加载时就被创建在常量区,而且只有一份
char str1[] ="Hello";
字符串常量:代码中代表其所在常量区的地址 是个地址常量
在栈区创建指针指向常量区的字符串常量
char* p1 = "Hello";
char* p2 = "Hello";
str的是常量区的复制品,因此可以修改
str1[0]='h';
指针指向的是常量区的地址,所以不可以修改
//p1[0]='h';
//p2[0]='h';
通过不同角度打印字符串:
printf("%d\n", "Hello world.");
printf("%c\n", "Hello world."[4]);//*("Hello"+4) "Hello"实际上是个地址
printf("%s\n", "Hello world." + 3);//字符串常量在代码中 就是个地址 (所在常量区的地址)
第一行打印的是字符串在常量区的首地址;第二行打印的是字符串中的第四个成员;第三行打印的是从第三个成员开始打印。
完整代码:
#include <stdio.h>
int main()
{
/*用debug调试观察变量信息 总结:字符数组与字符指针对字符串处理的区别*/
char str1[] ="Hello";//字符串常量 特点:exe加载时就被创建在常量区,而且只有一份
char* p1 = "Hello";//字符串常量:代码中代表其所在常量区的地址 是个地址常量
char* p2 = "Hello";
str1[0]='h';//str的是常量区的复制品,因此可以修改
//p1[0]='h';//指针指向的是常量区的地址,所以不可以修改
//p2[0]='h';
printf("%d\n", "Hello world.");
printf("%c\n", "Hello world."[4]);//*("Hello"+4) "Hello"实际上是个地址
printf("%s\n", "Hello world." + 3);//字符串常量在代码中 就是个地址 (所在常量区的地址)
return 0;
}