字符串;
字符串:有字符構(gòu)成的一個(gè)集合
字符竄的定義: 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"
內(nèi)存區(qū)域分配
1 棧區(qū):自動局部變量,系統(tǒng)分配的空間
2 堆區(qū):由程序員分配,調(diào)用malloc函數(shù)
3全局區(qū)(靜態(tài)區(qū);)全局變量,靜態(tài)變量
4文字常量區(qū):常量字符串
5代碼區(qū);二進(jìn)制代碼
5 字符串和指針的關(guān)系
由于所有的字符串都可以看成一位字符數(shù)組,所以和指針關(guān)系如上
6
strlen:長度,不算\0
strcpy:完全拷貝
strnpy:部分拷貝
strcat:完全拼接
strnpy:部分拼接
strcmp:比較
strnmp:部分比較
二 字符串?dāng)?shù)組
1>字符串?dāng)?shù)組:數(shù)組里面沒存放的都是都是字符串
字符串?dāng)?shù)組的定義 :char [2][20]
字符串?dāng)?shù)組的初始化
char string[2][10]={{"hello"},{"nihao"}}
char string[2][10]={"hello"."nihao"};
char *p[2]={"hello""你好"];
作用域
1>定義:起作用的區(qū)域
2>變量按作作用域分
局部變量:函數(shù)內(nèi)部定義的變量
全局變量:函數(shù)外部定義的變量
3變量按存儲類型分
auto 自動;如果不寫,默認(rèn)是auto
staitic:靜態(tài)
4 生命周期:有作用域和存儲類型共同決定
自動局部變量A;由函數(shù)決定
自動全局變量有整個(gè)程序決定
靜態(tài)局部變量:有整個(gè)程序決定
靜態(tài)全局變量:有單個(gè)文件決定
5 函數(shù)遞歸
1>函數(shù)遞歸:函數(shù)自己調(diào)用自己
2>遞歸不建議用的原因:
1>處理不好就會造成死循環(huán)
2>很占內(nèi)存
6 結(jié)構(gòu)體
1<結(jié)構(gòu)體:多個(gè)不同類型變量的集合
2<結(jié)構(gòu)體數(shù)據(jù)類型的定義:
struct person
{
成員變量1;
成員變量2;
........
}
7結(jié)構(gòu)體變量的定義 :struct Person p;
結(jié)構(gòu)體變量的初始化;
struct Person p={"name",'m',123};
struct Person p1;
struct (p1.name,"name");
struct Person p2=p;
8:內(nèi)存對齊的三個(gè)原則
(1)如果結(jié)構(gòu)體里面所有的成員變量(成員屬性)都是基本數(shù)據(jù)類型(int char,float,double 那么第一個(gè)成員變量從內(nèi)存地址偏移量為0 開始分配,后面的成員變量從內(nèi)存地址偏移量本身所占字節(jié)大小的最小倍數(shù)開始分配
(2) 如果結(jié)構(gòu)體里面所有的成員變量不是基本數(shù)據(jù)類型;比如說:int arr[10];那么這個(gè)數(shù)組成員變量從哪日存地址偏移量是這個(gè)數(shù)組本書里面的元素的最大字節(jié)數(shù)的而倍速開始分配
(3) 最后收尾的時(shí)候,所占字節(jié)數(shù)要是最大成員變量的最小倍數(shù)
結(jié)構(gòu)體嵌套:結(jié)構(gòu)體里面嵌套結(jié)構(gòu)體
struct Birth
{
int year;
int month;
int day;
};
struct person
{
zhar name[10];
int age;
struct Birth brith;
};