//---------------------字符串 常见的两种方式: char str[] = "abcd"; ---> 末尾自动追加 '\0' //栈区 char *str = "abcd"; ---> 末尾自动追加 '\0' //常量区
字符串是位于双引号中的字符序列
在内存中以"\0"结束,所占字节比实际多一个
"%s 占位符输出字符串 "%s 从给定的地址开始,输出字符直到遇到\0结束
注意:定义字符数组时,应确保数组长度比字符串长度至少多1('\0')
----------------------------------------
char str[5] = {'a','b','c','d','e'}; "有问题" 长度与内容不匹配
方法一: char str[6] = {'a','b','c','d','e','\0'};
char str[] = {'a','b','c','d','e','\0'}; //长度为 : 6
方法二: char str[6] = {'a','b','c','d','e'}; //定义的同时初始化,剩余没初始化是0
char str[] = {'a','b','c','d','e'}; "有问题" //长度 : 5
另一种: char str[6] = "abcde";
char str[] = "abcde"; //长度: 6
----------------------------------------
char ch[] = {'a','b','c','\0'};
char ch2[]= {"abc"};
char str[5];
str = "appl"; // str数组名 是常量
str[0] = 'a'; ......
#include <string.h>
strcpy(str,"appl");
str字符数组的字节数 > "appl"
//-------------------字符串的恒定性 "大前提: 是以字符指针的形式存储的字符串 char *str = "abcd";
1. 当我们以字符指针的形式存储字符串的时候,无论如何,字符串数据是存储在常量区的 并且 一旦存储到常量区中去 这个字符串的数组就无法更改
2. 当我们以字符指针的形式要将字符串数据存储到常量去的时候,并不是直接将字符串存储到常量区
而是先检查常量区是否有相同的内容的字符串 如果有,直接将这个字符串的地址拿过来返回 如果没有,才会将这个字符串数据存储在常量区
3. 当我们重新为字符指针初始化1个字符串的时候 并不是修改原来的字符串 而是重新的创建了1个字符串
char ch[] = "jack";
char *str = "rose";
ch[0] = 'a'; str[0] = 'a';
//-------------------------------指针
int a = 10;
int* p = &a; // 类型: 指针类型 : int *
*p = 20;
char ch = 'a';
char* p1 = &ch; // 类型 char *
能存地址的数据类型 ----> 地址
使用指针好处
a.为函数提供修改调用变量的灵活手段;
b.让函数有多个返回值
c.可以改善某些子程序的效率
变量的存取方式 存取方式分为两种: 直接存取 和 间接存取
# 直接存取:变量的赋值和取值(通过变量名进行存取值)
int num = 100;
num = 200;
# 间接存取:通过指针(地址)间接操作完成。
int num = 100;
int *p = # //p指向了 num 的地址
*p = 99;
|