陣列和指標 吃魚的小臉貓 新浪部落格

2021-09-25 19:12:53 字數 2275 閱讀 1781

一、陣列的定義及使用及分類

1、陣列是用來存放一組資料的,而因為存放的資料可以分為不同種類,陣列也分為不同種:int,

float,double ,char......

2、定義陣列的方式和定義乙個變數相似,都是資料型別+陣列名

(變數名),陣列長度可寫可不寫;在定義陣列時如給予一定的長度,一定要分配足夠的記憶體空間,確保所儲存的資料不會

越界(陣列越界將會使用非法記憶體導致危險);

3、在一維陣列名arr,表示整個陣列時只有如下情況:

(1)為防止陣列長度判斷出錯時,在定義陣列的同一函式中可以用len=sizeof(arr)/sizeof(arr[0])來求出陣列長度;

(2)在定義陣列的同乙個函式中,&arr+1,加整個陣列的大小

(3)而在其他情況中,陣列名代表的首元素的位址

4、在被呼叫函式中,形引數組被退化成指標(在本質上:陣列在形參中已經是指標),同時在傳遞陣列時同時需要傳遞陣列長度(字串陣列除外,因為在字串陣列中有明顯的『\0

』標誌作為結束標誌)

5、使用陣列的方式陣列名[下標

]=,下標是從

0開始的,

在定義陣列中陣列名[len];

二、指標

1、指標通俗的講就是位址

int *p=&a//定義乙個整型指標,將整型位址值放入整型指標變數中

(*的第一作用:在定義中起到說明是指標)

*p=100//將

a的值賦值為

100(*的第二作用:解引用,通俗講就是間接訪問符)

int **pp=&p//定義乙個二級指標,(就是定義乙個指標變數存放之前指標

p的位址)

**pp=100//通過倆次解引用將

a的值賦值為

100int ***ppp=&pp//定義乙個**指標,(就是定義乙個指標變數存放之前指標

pp的位址)

***ppp=100//通過三次解引用將

a的值賦值為

100;

2、指標分配的記憶體空間

指標的記憶體空間由平台決定,與資料型別無關,所以資料型別不影響指標的記憶體空間大小

cpu->os->編譯器

(每乙個都是由它前乙個所決定,呈金字塔型)

32(64

)位操作平台:指標4(

8)個位元組

3、指標的運算

(1)p++:是指加的乙個單元格(而單元格由資料型別決定),所以指標運算需要調整權重(調整權重即為去掉乙個*,求

sizeof

)(2)

指標—指標=

相差多少個單元格(調整權重)

(3)其他指標運算不存在,且指標的運算都需要調整權重

int arr[10];

int *q = &arr[9];//x+36

int *p= &arr[1];//x+4

printf("%d\n",q-p);//8

printf("%d\n",(char *)q-(char *)p);//32

printf("%d\n",(short **)q-(short **)p);//8

printf("%d\n",(double *)q-(double *)p);//4

printf("%d\n",(unsigned long long)q-(unsigned long long)p);//32

int *p = (int *)0x2010;

printf("%x\n",p-2);//2008

printf("%x\n",(char *)p-2);//200e

printf("%x\n",(short *)p-2);//200c

printf("%x\n",(double *)p-2);//2000

printf("%x\n",(char ***)p-2);//2008

printf("%x\n",(unsigned long)p-2);//200e

int *p = (int *)100;

printf("%d\n",p+4);//100+4*sizeof(int)=116

printf("%d\n",(char *)p+4);//104

printf("%d\n",(short *)p+4);//108,

printf("%d\n",(double *)p+4);//132

printf("%d\n",(char **)p+4);//116

printf("%d\n",(double ***)p+4);//116

printf("%d\n",(long long)p+4);//104

系統呼叫和訊號 吃魚的小臉貓 新浪部落格

一 系統呼叫 1 檔案描述符 每個程序在pcb中都儲存著乙份檔案描述表,檔案描述符即為該錶 的索引 核心利用檔案描述符來訪問檔案,當開啟 讀 寫乙個檔案時,核心就會返回乙個檔案 描述符 檔案描述符是乙個非父負整數 2 系統呼叫 1 實現在核心中,通過介面來接受,而不是通過呼叫,讓 在核心中執行,即核...

函式預設值和內聯函式 吃魚的小臉貓 新浪部落格

一 函式預設值 1.定義 我們可以賦予函式引數預設值。所謂預設值就是在呼叫時,可以不寫某些引數的值,編譯器會自動把預設值傳遞給呼叫語句中。預設值可以在宣告或定義中 設定 也可在宣告或定義時都設定,都設定時要求預設值是相同的。2.函式預設值的特性 1 預設引數在函式宣告中提供,當又有宣告又有定義時,定...

2023年03月08日 吃魚的小臉貓 新浪部落格

一 函式指標 顧名思義 指向函式的指標 int p int,int p max true printf d p 20,10 printf d p 20,10 false printf d p 20,10 補充 arr和 arr的數值相同,但含義不同 arr 陣列名可表示陣列的首位址,1 的是陣列單個...