看板 C_and_CPP 關於我們 聯絡資訊
我知道我有一個函數func(int* array),array 是一個二維矩陣, 可是我無法去修改函數內容, 想要將該陣列取出, 所以寫了下面程式測試, 卻發現取出完全不相同的東西, 還有請版上的高手開導一下, 感恩 開發平台: dev C++ 測資輸入: #include <stdio.h> #include <stdlib.h> void func(int*); int matrix[3][3]={{14,23,42}, {23,423,14}, {34,34,53,}}; int main(void) { int *ptr; int i, j; ptr=(int*)malloc(sizeof(int)*3*3); func(ptr); for(i=0;i<3;i++) { for(j=0;j<3;j++) printf("ptr[%d*3+%d]=%d\n",i,j,*(ptr+i*3+j)); } free(ptr); system("pause"); return 0; } void func(int* array) { int i, j; array=(int*)malloc(sizeof(int)*3*3); for(i=0;i<3;i++) { for(j=0;j<3;j++) { array[i*3+j]=matrix[i][j]; printf("array[%d*3+%d]=%d\n",i,j,*(array+i*3+j)); } } return; } 輸出結果: array{0*3*0]=14 array[0*3*1]=23 . . . . . ptr[0*3*0]=4064384 ptr[0*3*1]=4064384 . . . 補充說明: 只是用ptr去取代array 為何輸出結果會不相同呢?? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.110.200.124
dendrobium:因為 array=(int*)malloc(sizeof(int)*3*3); 10/23 14:36
dendrobium:所以 ptr 和 array所指向的位置並不相同 10/23 14:36
dendrobium:如果想要得到相同的東西 請拿掉上面那行 10/23 14:37
QQ29:感覺你觀念有根本的錯誤耶 為啥你會想再function內再malloc 10/23 14:45
QQ29:一次? 不是說指標要用就一定要配置空間阿@@ 10/23 14:45
cheekyboy:感謝兩位指導 已解決 10/23 15:43