文字常量区相关知识点说明
文字常量区
#include <stdio.h>
void fun(char *tmp)
{
*tmp = 'a';//err
}
int main(int argc, char const *argv[])
{
char *p = NULL;//p是变量
"hello mike";//字符串常量,首元素地址
p = "hello mike";//p指向字符串
//*p = 'a';//err,指向文字常量区,文字常量区的内容只读
p = NULL;//p是变量,ok
p = "hello";//p是变量,是"abc"首元素地址
char *p2 = "abc";
fun(p2);//p2的值,是"abc"首元素地址
return 0;
}
字符串常量
#include <stdio.h>
int main(int argc, char const *argv[])
{
//1、字符串常量就是此字符串的首元素地址
printf("s1 = %p\n", "hello mike");
char *p1 = "hello mike";
printf("p1 = %p\n", p1);
char *p2 = "hello mike";
printf("p2 = %p\n", p2);
//s1 p1 p2打印的地址是一样的
//2、字符串常量,文字常量去的字符串,只读,不能修改
printf("*p1 = %c\n", *p1);//读,ok
//*p1 = 'a';//修改,err
//3、p3指向文字常量区内存,不能修改
//char *p3 = "hello";
//strcpy(p3 , "abc");//err
return 0;
}
void fun()
{
printf("fun s2 = %p\n", "hello mike");
}
int main01(int argc, char const *argv[])
{
//1、每个字符串都是一个地址,这个地址是指字符串首元素地址
//2、字符串常量放在data区
printf("s1 = %s\n", "hello mike");
printf("s1 = %p\n", "hello mike");//打印的地址和s2是一样的
printf("s3 = %s\n", "hello mike" + 1);//打印出ello mike
printf("s4 = %c\n", *("hello mike"));//取首元素
//fun();
return 0;
}
字符串常量区字符指针和字符数组的区别
#include <stdio.h>
int main(int argc, char const *argv[])
{
//1、p指针保存了"hello"的地址
//2、指针所指向的内存不能修改
char *p = "hello";
//1、把"hello"一个一个字符放在buf数组中
//2、数组的元素可以修改
char buf[] = "hello";
return 0;
}