基础
- 字符串的表现形式
- char string[] = “hello world"; //栈(局部)
- char *str = “hello world"; //文字常量区
- 二者区别
- 字符数组,每个元素存一个字符;字符指针只存放字符串的首地址,不是整个字符串
- 字符数组,在(栈或堆)中开辟空间存放字符串;字符指针在文字常量区开辟空间存放字符串
- 字符数组,中的字符可以修改;字符指针的字符不可修改,但可修改指针的指向(文字常量区的内容为只读内容)
- 字符数组,在编译时为其分配内存单元,有确定的地址;字符指针,指向不确定内存段,最好初始化
- 字符数组
char str[10];
scanf("%s", str); //或使用字符串拷贝函数进行拷贝赋值
2. 字符指针
危险:
char *p; //指针变量未初始化,指向一个不确定的内存段
scanf("%s", p);
建议:
char *p = NULL;
p = (char *)malloc(10);
scanf("%s", p); //或使用字符串拷贝函数进行拷贝赋值
参考:
https://baijiahao.baidu.com/s?id=1604208649221500040&wfr=spider&for=pc
指针作为返回值
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char * test()
{
//字符数组 创建位置在栈区
//char arr[] = "hello world";
//字符串常量 会在程序运行时 常量区 不能被修改的 在程序结束时 销毁
char * arr = "hello world";
//保证指针地址对应的值是有内容的
return arr;
}
int main04()
{
char * p = test();
printf("%p\n", p);
printf("%s\n", p);
system("pause");
return EXIT_SUCCESS;
}