作者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