字符串;
字符串:有字符构成的一个集合
字符窜的定义: char string[10]
字符串的初始化:
char string [10]="hello";
char string []="hello";
char string[10]={"hello"};
char string *p="hello";
如下写法是非法的
char *const string;
char string[10];
string="hello";
以下写法是合法的
char *P=" hello"
p="word"
内存区域分配
1 栈区:自动局部变量,系统分配的空间
2 堆区:由程序员分配,调用malloc函数
3全局区(静态区;)全局变量,静态变量
4文字常量区:常量字符串
5代码区;二进制代码
5 字符串和指针的关系
由于所有的字符串都可以看成一位字符数组,所以和指针关系如上
6
strlen:长度,不算\0
strcpy:完全拷贝
strnpy:部分拷贝
strcat:完全拼接
strnpy:部分拼接
strcmp:比较
strnmp:部分比较
二 字符串数组
1>字符串数组:数组里面没存放的都是都是字符串
字符串数组的定义 :char [2][20]
字符串数组的初始化
char string[2][10]={{"hello"},{"nihao"}}
char string[2][10]={"hello"."nihao"};
char *p[2]={"hello""你好"];
作用域
1>定义:起作用的区域
2>变量按作作用域分
局部变量:函数内部定义的变量
全局变量:函数外部定义的变量
3变量按存储类型分
auto 自动;如果不写,默认是auto
staitic:静态
4 生命周期:有作用域和存储类型共同决定
自动局部变量A;由函数决定
自动全局变量有整个程序决定
静态局部变量:有整个程序决定
静态全局变量:有单个文件决定
5 函数递归
1>函数递归:函数自己调用自己
2>递归不建议用的原因:
1>处理不好就会造成死循环
2>很占内存
6 结构体
1<结构体:多个不同类型变量的集合
2<结构体数据类型的定义:
struct person
{
成员变量1;
成员变量2;
........
}
7结构体变量的定义 :struct Person p;
结构体变量的初始化;
struct Person p={"name",'m',123};
struct Person p1;
struct (p1.name,"name");
struct Person p2=p;
8:内存对齐的三个原则
(1)如果结构体里面所有的成员变量(成员属性)都是基本数据类型(int char,float,double 那么第一个成员变量从内存地址偏移量为0 开始分配,后面的成员变量从内存地址偏移量本身所占字节大小的最小倍数开始分配
(2) 如果结构体里面所有的成员变量不是基本数据类型;比如说:int arr[10];那么这个数组成员变量从哪日存地址偏移量是这个数组本书里面的元素的最大字节数的而倍速开始分配
(3) 最后收尾的时候,所占字节数要是最大成员变量的最小倍数
结构体嵌套:结构体里面嵌套结构体
struct Birth
{
int year;
int month;
int day;
};
struct person
{
zhar name[10];
int age;
struct Birth brith;
};