1.陣列//一堆相同型別資料的集合
//一定是在記憶體上佔據一塊連續的空間
1.1一維資料
.1陣列的定義
資料型別 陣列名[大小];
資料型別 陣列名[大小] = ;//初始化
int arr[10];//陣列名是陣列首位址
.2陣列的賦值
陣列名[下標];//取到陣列某個元素
陣列下標範圍0 ~ n-1
arr[4] = 10;
.3陣列的初始化//定義的同時賦值
①完全初始化
int arr[10] = ;
char arr[5] = ;
char name = "zhangsan";
②部分初始化
int arr[10] = ;
③指定元素初始化
int arr[10] =
.4字元陣列
①陣列清零
int arr[10] = {};
bzero(引數1,引數2);
//對指定陣列進行清零操作
引數1:要清零的陣列
引數2:要清零的位元組數長度
例子:bzero(arr,40);
memset(引數1,引數2,引數3);
引數1:要修改的陣列
引數2:要修改的值
引數3:要修改的位元組數長度
char name[10];
memset(name,0,10);
memset(name,'1',10);//只用做字元陣列
strcpy(引數1,引數2)
strcmp(引數1,引數2);//"abcd" "abef"
//大於返回正數,小於返回負數
strcat(引數1,引數2);
1.2二維陣列//也是在記憶體上連續
int arr[行][列];//int arr[3][4];
0 1 2 3
4 5 6 7//arr[1][1]
8 9 0 1
二維陣列初始化:
int arr[3][4] = };
2.指標變數//變數的作用:儲存 運算
給每乙個小塊乙個編號(位址)
指標變數:專門用來儲存位址,能存放位址的只有指標
.1指標型別//有多少個資料型別,就有多少個指標型別
資料型別 變數名;
資料型別 變數名 = 值;
char ch = 'a';
int a = 100;
char* p = &ch;//char *p;
p = &a;//肯定可以儲存,但是取值會出問題,*p取乙個位元組
printf("%c\n",*p);
printf("%p\n",p);
printf("%p\n",&a);
.2指標的大小
//指標就是用來儲存位址的,所以位址多大,指標就多大
32位機指標4個位元組,64位指標8個位元組//指標大小只和機器位數有關
任意型別的指標都可以儲存任意型別的位址,但是不建議這樣做,因為取值會出問題
char *p1;//*p1取乙個位元組
short *p2;//*p2取兩個位元組
int *p3;
double *p4;
.3萬能指標//空型別的指標
void *p;//可以儲存/賦值任意指標,不報警告
//不可以對萬能指標取值
.4空指標野指標
野指標:指向不明確的指標
int *p;//出不出錯都正常
空指標:指向為null的指標
int *p = null;//#define null (void *)0x00
//對空指標取值一定出錯
例子:/* int a;
int *p = &a;//0x8eff455
*/ int *p = 0x12345678;//行,但是會報警告
p = (void *)0x12345678;//消除警告
printf("%d\n",*p);//不行
3.陣列和指標的關係
3.1一維陣列和指標的關係
int arr[5] = ;//int *const arr;
int *p;//p = arr;p = &arr[0];
arr[0] arr[1]
*(p+0) *(p+1)
// p[0] p[1]
//一旦乙個指標指向乙個一維陣列,此時指標和陣列的使用就一模一樣
唯一區別:指標值可以變化,陣列名不可以改變
3.2二維陣列和指標的關係
指標陣列://是乙個陣列
int *arr[3] = ;//有十個元素,可以儲存十個位址
int buf[3][4];
0 1 2 3
4 5 6 7
8 9 0 1
arr[0] = &buf[0][0];//buf[0];
arr[1] = &buf[1][0];
arr[2] = &buf[2][0];
buf[1][1];//arr[1][1];*(*(arr+1)+1)
陣列指標://專門指向二維陣列
int buf[3][4];
0 1 2 3
4 5 6 7
8 9 0 1
int (*p)[4] = buf;//該指標+1,表示向後挪動4個int數
buf++;//p[1][1];
void fun(int (*p)[4])
void main()
4.構造型別:結構體
.1建立結構體
typedef struct passwd
pwd_t;//1.建立乙個新的資料型別
//2.定義結構體變數
pwd_t zs;//size_t
.2結構體訪問成員
pwd_t zs;
strcpy(zs.user,"張三");
strcpy(zs.pwd,"123456");
.3結構體陣列
pwd_t arr[10];
arr[0].user;
.4結構體指標(動態記憶體管理)
pwd_t *p;
棧:系統分配,系統釋放
堆:使用者申請,使用者釋放
malloc(要申請空間的位元組數大小);
//申請成功,返回新空間的位址;失敗返回null
//申請空間存放10個int數 malloc(4*10);
例子:p = malloc(sizeof(pwd_t));
strcpy(p->user,"張三");
資料結構(c語言) 簡單迷宮
迷宮 對於乙個用空格和 號組成的迷宮,如下 這是乙個10 10的迷宮。如果碰到 那個方向就走不通。大致演算法 遞迴 初始點為 1,1 優先向右探路,不通就向下,還不通的就向左,再不通就向上探路。棧每走一步,判斷是否走過,如果沒有,就把座標記錄到棧中。如果有,返回上一層遞迴。include stdio...
資料結構(C )簡單順序表
資料結構學過了模板之後就開始了線性表的學習,線性表又分為簡單的順序儲存和鏈式儲存兩種方式。兩種方法各有長短,根據不同的實際情況定義使用。是零個或多個具有相同型別的資料元素的有限序列。通常的線性表中有兩個元素,乙個是儲存的資料,另乙個是表資料的長度。線性表的順序儲存,是指用一維位址連續的儲存單元依次儲...
資料結構 簡單小結
資料結構 優點缺點 陣列插入快,知道下標可快速訪問 查詢慢,刪除慢,大小固定 有序陣列 比無序陣列查詢快 插入 刪除慢,大小固定 棧後進先出的方式訪問 訪問其他項很慢 佇列先進先出的方式訪問 訪問其他項很慢 鍊錶插入 刪除快 查詢慢二叉樹 插入 刪除 查詢都快 如果樹保持平衡 刪除演算法複雜 紅 黑...