字符数组存储的字符是在栈,栈是
可读可写的,所以字符的内容可以任意系修改
使用char类型的指针定义的字符串,它是在常量区,常量区是一个只读区,所它所指向的内容是不可以修改的
使用场景:
1.当你定义的字符串中的内容在后面需要修改的时候就使用字符数组
2.当你定义的字符串不需要修改的时候就使用字符指针来定义字符串
常量的特性
1、常量区的东西无论使用多少次,在内存只有一份
2、效率高,省内存
3、里面内容不可以修改,可以保证程序的安全性
void test(){
//1.字符数组存储的字符是在栈,栈是可读可写的,所以字符的内容可以任意系修改
//定义一个字符数组
char str[] = "hello";
str[0] = 'a'; //str是一个字符数组,所以可以改变内容
printf("%s\n",str);
//2.使用char类型的指针定义的字符串,它是在常量区,常量区是一个只读区,所它所指向的内容是不可以修改的
//定义一个字符指针
char *p ="hello";
//*p = "nihao"; 无法改变内容,因为定义指针的时候指向的是一个常量,只能读,不能写
printf("%s\n",p);
//3.定义一个指针指向一个字符变量就能改变内容
char c = 'c';
char *p1 = &c;
*p1 = 'a';
printf("%c\n",c);//打印 a
}
int main(int argc, const char * argv[]) {
//通过打印地址来证明字符数组和字符指针的区别
char str1[] = "hello";
char str2[] = "hello";
printf("%p\n",str1);//打印0x7fff5fbff72a
printf("%p\n",str2);//打印0x7fff5fbff724 同字符串地址不同
char *p1 = "hello";
char *p2 = "hello";
printf("%p\n",p1);//打印0x100000f8a
printf("%p\n",p2);//打印0x100000f8a 指向常量的指针地址都相同
return 0;
}