看板 NCTU-STAT98G 關於我們 聯絡資訊
#include <stdio.h> #include <stdlib.h> #include <math.h> int main() { int i,j; int m=4,n=4;// m rows, n columns double **A;//二維資指標變數宣告 A = (double **) malloc (m*sizeof(*A));//a *A = (double *) malloc (n*m*sizeof(**A));//b for ( i=0 ; i<m ; i++ ) *(A+i) = *A+i*n;//c /* A具有雙重指標, 分配三步驟: a行: 宣告A具有m個指標變數 *A, *(A+1), ..., *(A+m-1) b行: 宣告*A具有n*m個double值, 分別為**A, *(*A+1), .. *(*A+mn-1) c行: 將*(A+i)的起始位址設為*A+i*n */ /* 想像n*m 是一連串的8 bytes (double)的記憶體位址 ex: m=2,n=2 其記憶體位址分別為*A, *A+1, *A+2, *A+3 (b行) 其值分別為**A, *(*A+1), *(*A+2), *(*A+3), 此時宣告A有兩個指標變數 *(A+0), *(A+1) (a行) 將*(A+0)指向*A, *(A+1)指向*A+1*2 = *A+3 (c行) 下面例子顯示如何將一串的記憶體位址*A, *A+1, *A+2, *A+3 (記憶體位址串) 分配到*A, *(A+1) (位址配置)*/ for (i=0;i<m;i++) { for (j=0;j<n;j++) { printf("%x\t",*A+n*i+j); } printf("\n"); }//將記憶體位址串排列成陣列 system("pause"); /* 記憶體位址: *(A+i)+j = A[i]+j = &A[i][j] 相對應的值: *(*(A+i)+j) = *(A[i]+j) = A[i][j] */ for (i=0;i<m;i++) { for (j=0;j<n;j++) { printf("%x\t",*(A+i)+j); } printf("\n"); }//位址配置 Type 1 system("pause"); for (i=0;i<m;i++) { for (j=0;j<n;j++) { printf("%x\t",A[i]+j); } printf("\n"); }//位址配置 Type 2 system("pause"); for (i=0;i<m;i++) { for (j=0;j<n;j++) { printf("%x\t",&A[i][j]); } printf("\n"); }//位址配置 Type 3 return 0; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.7.248