5_
預備知識_指標
_2 指標的重要性:
指標是c語言的靈魂
定義:cpu*****位址線,控制線,資料線*****記憶體
指標:指標就是位址,位址就是指標。
指標變數是存放記憶體單元位址的變數。
指標的本質是乙個操作受限的非負整數。
分類:1.基本型別的指標
2.指標和陣列的關係
變數並不一定連續分配,隨機分配記憶體。
記憶體:記憶體是多位元組組成的線性一維儲存空間。
記憶體的基本劃分單位是位元組。
每個位元組含有8位,每一位存放1個0或1個1.
記憶體和編號是一一對應的。
軟體在執行前需要向作業系統申請儲存空間。在軟體執行期間,該軟體所佔空間不再分配給其他軟體。當軟體執行完畢後,作業系統將**該記憶體空間(作業系統並不清空該記憶體空間中遺留下來的資料)。
note:1)指標變數也是變數,普通變數前不能加*,常亮和表示式前不能加&。
2)區域性變數只在本函式內部使用。
如何通過被調函式修改主調函式中普通變數的值。
2)形參為以該變數的型別為型別的指標變數;
3)在被調函式中通過 *形參變數名的形式 的形式就可以修改主函式。
case 1
#include
int main(void)
int*p; //p是個變數名字,int*表示該p變數只能儲存int型別變數的位址
inti=10;
intj;
// j=*p;
// printf("%d\n",j); //error,p未指定
// charch='a';
// p=&ch; //error,型別不一致
p=&i; //p儲存i的位址,p指向i;修改p的值不影響i的值,修改i的值不影響p的值;任何場合下,*p和i可以互換。*p等價於i。
//p=10; //error
j=*p;//等價於j=i;
printf("i=%d,j=%d,*p=%d\n",i,j,*p);
return0;
case 2
#include
void f(int * i)//不是定義了乙個名字叫做*i的形參,而是定義了乙個形參,該形參名字叫做i,它的型別是int*
*i=100;
int main(void)
inti=9;
f(&i); //區域性變數只在本函式內部使用。
printf("i=%d\n",i);
指標和數字
case 1
a[3]==*(3+a); 3[a] ==*(a+3)==*(3+a);
int a[5]=;
show_aarry(a,5);//a等價於&a[0],&a[0]本身就是int*型別
void show_array(int * p,int len)
inti;
//p[2]=-1;// p[0]=*p ; p[2]==*(p+2)==*(a+2)==a[2] ; p[i]就是主函式的a[i]
for (i=0;iprintf(「%d\n」,p[i]);
指標變數的運算
指標變數不能相加,不能相乘,不能相除。
如果兩指標變數屬於同一陣列,則可以相減。
指標變數可以加減一整數,前提是最終結果不能超過指標變數
p+i的值是p+i*(p所指向的變數所佔的位元組數)
p-i的值是p-i*(p所指向的變數所佔的位元組數)
p++<==>p+1 p--<==>p-1
郝斌資料結構1 預備知識 指標 跨函式使用記憶體
結構體 為什麼會出現結構體 為了表示一些複雜的資料,而普通的基本資料型別無法滿足要求 定義 結構體是使用者更加實際需要自己定義的復合資料型別 如何使用結構體 略 一維陣列 include include intmain void len為一維陣列的長度,可以根據需求動態分配長度 int len pr...
郝斌資料結構4遞迴
1 定義 乙個函式自己直接或間接呼叫自己 2 舉例 include include voidf int n else int main void 執行結果 3 n的階乘用遞迴來實現 3.1 如果不用遞迴來實現 3.2 如果用遞迴來實現 4 1 2 3 100之和用遞迴來實現 4.1 不用遞迴實現 4...
郝斌老師資料結構10(遞迴)
這對你的編碼能力是個質的飛躍,如果你想成為乙個很厲害的程式設計師,資料結構是必須要掌握的,因為計算機專業的本科生也達不到這水平!計算機特別適合用遞迴的思想來解決問題,但是我們人類用遞迴的思想來考慮問題就會感到十分困擾,這也是很多學過遞迴的人一直都搞不明白的地方!那是不是遞迴可以隨便寫,當然不是,有些...