作者markoo (上行下笑阿..)
看板NCTU-STAT98G
標題0721 統算 section 2-2.cpp
時間Tue Jul 21 12:39:03 2009
#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