c語言高階 二級指標記憶體模型

2021-08-20 13:56:05 字數 2349 閱讀 4827

//指標做輸出:被呼叫函式分配記憶體

//指標做輸入:主呼叫函式分配記憶體

//求檔案中的兩段話的長度

int getmem(char **myp1, int *mylen1, char **myp2, int *mylen2)

strcpy(tmp1, "abcdefg");

*mylen1 = strlen(tmp1);

*myp1 = tmp1; //間接修改實參p1的值

tmp2 = (char *)malloc(100);

if (tmp2 == null)

strcpy(tmp2, "11122233333");

*mylen2 = strlen(tmp2);

*myp2 = tmp2; //間接修改實參p1的值

return0;}

int getmem_free(char *myp1)

free(myp1); //釋放完指標變數 所致的記憶體空間

return0;}

int main()

void printmyarray(char **myarray, int num)

void sortmyarray(char **myarray, int num)}}

}int main()

; //計算元素個數

num = sizeof(myarray)/sizeof(myarray[0]);

printf("排序之前\n");

printmyarray(myarray, num);

sortmyarray(myarray, num);

printf("排序之後\n");

printmyarray(myarray, num);

printf("hello...\n");

system("pause");

return ;

}

void printmyarray(char myarray[10][30], int num)

void sortmyarray(char myarray[10][30], int num)}}

}int main()

; //列印

printf("排序之前\n");

printmyarray(myarray, num);

sortmyarray(myarray, num);

//列印

printf("排序之後\n");

printmyarray(myarray, num);

printf("hello...\n");

system("pause");

return

0;}

與第一種模型的不同之處:

1、交換的是記憶體塊而不是指標的指向。

2、不能用char **myarray作為函式的引數傳遞二維陣列實參。因為第一種模型中,陣列儲存的是指標,myarray的步長為8個位元組(32為4位元組),但是在第二個模型中是乙個二維陣列,編譯器只會認為是乙個10x30的記憶體空間,步長為30位元組,因此會發生步長錯誤。

//為二級指標分配記憶體 

char **getmem(int num)

for (i=0; ichar *)malloc(sizeof(char) * 100 ); //char buf[100];

sprintf(p2[i], "%d%d%d", i+1, i+1, i+1);

}return p2;

}void printmyarray(char **myarray, int num)

}void sortmyarray(char **myarray, int num)}}

}void getmem_free(char **p2, int num)

}if (p2!=null)

}int main()

這種模型實際上為堆上的指標陣列,用法與第一種基本一致,區別就是第一種記憶體分配在棧上而已。

int i = 0;

//指標陣列

char * p1 = ;

//二維陣列

char p2[3][4] = ;

//手工二維記憶體

C語言 二級指標記憶體模型

二級指標第一種記憶體模型 include include 說明 類似於int a 5 陣列名a是一維陣列a中首元素的指標 我自認為此假設可應用於多維陣列與指標 二級指標的主要功能是修改一級指標的值 列印一維陣列 int printarr char pin,int num 列印二級指標陣列 int i...

C語言 二級指標記憶體模型

二級指標記憶體模型 define crt secure no warnings include include include 記憶體模型詳解 一維陣列型別是 typedef int myarr 5 myarr a 其中myarr是一維陣列型別 myarr p p是一維陣列的指標 是一維陣列的指標的...

二級指標記憶體模型(一)

二級指標做輸入 include include include int getmem char myp1,int mylen1,char myp2,int mylen2 strcpy tmp1,abcdefg mylen1 strlen tmp1 myp1 tmp1 tmp2 char malloc...