學習c語言至今,已經到了乙個瓶頸,難度大多來自於指標和指標的引數傳遞。
指標分為一維指標、多維指標、函式指標、指標陣列、陣列指標等等;其中主要我們要了解的是一維指標和指標陣列、陣列指標。
#include
#include
void allocate_memory_for_two_array(int *pload,int line,int row)
void initial_memory_for_two_array(int *pload,int line,int row)
void sort_pop_for_two_array(int *pload,int line,int row)
void output_two_array(int *pload,int line,int row)
void get_line_and_row_for_two_array(int *pline,int *prow)
int main(void)
一維指標,實際上就是乙個位址,眾所周知乙個陣列的首位址就是乙個一維指標,形式為int(char) *,
多維指標;本質上也是由一維指標演變來的;
例如:int buff,作為二維陣列,其首位址可以寫做 buff,這是乙個行指標,代表第0行的位址,當然也是乙個一維指標,同樣的,如果要將第一行的第乙個元素的位址表達出來,buff[0],而如果要求整個二維陣列的位址應該用&buff表示,對其求值,也就是*buff,代表著第一行第乙個元素的位址,如果再次求值**buff,得出的結果是第一行第乙個元素位址存放的值
二維陣列:
int load[5][10];
int *pload=&load[0][0];pload型別是int*,load[i]本質上是二維陣列第i+1行的
多維指標;
int num=10;
int *pload=#
int **ppload=&pload;
int ***pppload=&ppload;
函式的指標引數傳遞問題 理解指標變數
我們預期的結果是輸出兩個 a.可是執行的結果卻是下圖。為什麼只輸出了乙個a?下面我們分析一下 在fun1中,我們用malloc分配了一段記憶體,並將該段記憶體的首位址放在指標變數n,然後我們就用n這個位址,開始給結構體賦值。在fun2中,我們以為在fun1中已經給node分配好了記憶體,也賦好值了。...
關於指標引數的記憶體傳遞副本
乙個錯誤的例子 void getmemory char p,int num void test void 書上關於這個的解釋是 編譯器編譯時給指標引數提供臨時副本 p,使得 p p。如果函式體內的程式修改了 p指向的內容,就導致引數p指向的內容也被做了相應的修改,因為他們指向同一記憶體空間。在本例中...
指標引數傳遞
字串傳遞1 void test char p1 int main 方法2 void test char p1 int main 方法3 void test char p1 int main 以下是錯誤的,因為在函式體內改變p1本身的值,不會影響實參p1本身的值 static char a 100 v...