c語言複習 指標和陣列

2021-09-02 07:27:54 字數 2004 閱讀 6869

注:本文是對蘇小紅版c語言程式設計第11章的筆記

陣列名代表陣列元素的連續儲存空間的首位址,即指向陣列中的第乙個元素的指標常量。e.g.: a <=>&a[0], *(a + i) <=>a[i]

不能對陣列名執行增1或減1的操作(a是指標常量)

p + 1 和p++本質上是不同的操作:雖然二者都對指標變數p進行加1運算,但p+1不改變指標的指向,而p++相當於執行p = p + 1

p++加上的是1*sizeof(基型別)

行指標:a[i][j] <–>* (a[i] + j) <–>* (* (a + i) + j) <–> *(a + i)[j]

二維陣列中a[i]可以看成由a[i][1]…a[i][n]構成的一維陣列的陣列名,代表陣列的首位址

列指標:a[i][j] <–>*(p+i * n+j) <–>p[i * n + j]

對比以下三種函式引數:

void input(int a[n], int m, int n);//二位陣列作函式引數

void input(int (*a)[n], int m, int n);//二位陣列行指標作引數

void input(int *a, int m, int n);//二維陣列列指標作引數

指標陣列:元素是指向同一型別元素的指標,最主要用途之一就是對多個字串程序處理操作

使用前必須進行初始化

#include int main(int argc, char *argv)//argc:命令列中引數個數 agrv:接收命令列引數

}return 0;

}

c中變數的分配:

從靜態儲存區分配(編譯時分配,終止前收回):

全域性變數和靜態變數

在棧上分配:

效率高,容量有限,可能出現棧溢位從而使程式執行失敗

從堆上分配:

動態記憶體申請的記憶體

生存期由程式設計師決定,使用靈活,容易出現記憶體洩漏等問題

必須及時free()已不再適用的記憶體

動態記憶體分配函式

malloc():void *malloc (unsigned int size);

...

int *pi = null;

pi = (int *)malloc(sizeof(int));//用強轉的方法將返回的指標值轉為所需型別, 適用sizeof有利於提高可移植性

calloc():用於給若干同型別資料項分配兩虛的儲存空間並賦值為0

原型:void *calloc(unsigned int num, unsigned int size);

float *pf = null;

pf = (float*)calloc(10, sizeof(float));

free(): void free(void *p);

realloc():void realloc(void *p, unsigned int size);

用於改變原來分配的儲存空間的大小, 返回值是新分配的儲存空間的首位址,與原來分配的首位址不一定相同。

常見錯誤:

記憶體未分配成功就適用

記憶體分配成功了,但未初始化就適用

記憶體分配成功了, 也初始化了,但發生了越界使用

忘記了釋放記憶體,造成記憶體洩漏

釋放記憶體後仍然繼續使用(使用野指標)

野指標形成的主要原因:

指標操作超越了變數的作用範圍

指標變數未被初始化

指標變數所指向的動態記憶體被free後未置為null

解決對策:

不把區域性變數的位址(指向「棧記憶體」的指標)作為函式的返回值返回

在定義指標變數的同時對其初始化,要麼設定為null,要麼使其指向合法記憶體

盡量把malloc()集中在函式的入口處,free()集中在函式的出口處

C語言複習 指標和陣列

include include 陣列是一塊連續的記憶體空間 陣列名 就是記憶體空間的首位址 陣列名 i 陣列名 i main printf a 0 d n arr 0 printf a 4 d n arr 4 邏輯上是錯誤的 陣列下標越界 printf a 5 d n arr 5 windows x...

C語言指標陣列和陣列指標

初學者總是分不出指標陣列與陣列指標的區別。其實很好理解 指標陣列 首先它是乙個陣列,陣列的元素都是指標,陣列佔多少個位元組由陣列本身決定。它是 儲存指標的陣列 的簡稱。陣列指標 首先它是乙個指標,它指向乙個陣列。在32 位系統下永遠是佔4 個位元組,至於它指向的陣列佔多少位元組,不知道。它是 指向陣...

C語言指標陣列和陣列指標

初學者總是分不出指標陣列與陣列指標的區別。其實很好理解 指標陣列 首先它是乙個陣列,陣列的元素都是指標,陣列佔多少個位元組由陣列本身決定。它是 儲存指標的陣列 的簡稱。陣列指標 首先它是乙個指標,它指向乙個陣列。在32 位系統下永遠是佔4 個位元組,至於它指向的陣列佔多少位元組,不知道。它是 指向陣...