//指標做輸出:被呼叫函式分配記憶體
//指標做輸入:主呼叫函式分配記憶體
//求檔案中的兩段話的長度
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...