闲来无事,读了读Stephen Prata的C Primer Plus,
在 “动态内存分配与变长数组” 作者的代码示例有点问题:
C语言声明定长数组的数组长度必须是常量。
给出UP主修正的代码示例:
#include<stdio.h>
//#include <stdlib.h>
void OneDemensionArray();
void TwoDemensionArray();
int main(){
TwoDemensionArray();
system("pause");
return 0;
}
void OneDemensionArray(){
int n;
int i=0;
//int ar[n];
int * pi;
printf("请输入一维数组长度 n: \n");
scanf("%d",&n);
getchar();
pi=(int*)malloc(n*sizeof(int));
for (i=0;i <n;i++)
{
*(pi+i)=i;
}
for (i=0;i <n;i++)
{
printf("%d ",*(pi+i));
}
printf("\n");
free(pi);
}
void TwoDemensionArray(){
int n;
int m;
int * pTwoD_Array; // pTwoD_Array 是一个指针, 代表二维数组的第一个元素的地址
int i=0, j=0, count=0;
printf("请输入二维数组行 n: \n");
scanf("%d",&n);
getchar();
printf("请输入二维数组列 n: \n");
scanf("%d",&m);
getchar();
pTwoD_Array=(int*)malloc(n*m*sizeof(int));
for (i=0;i<n;i++ )
{
for (j=0;j<m;j++ )
{
*(pTwoD_Array+m*i+j) = (++count);
// pTwoD_Array 是一个指针, 代表二维数组的第一个元素的地址
// pTwoD_Array+m*i+j 是一个指针,代表第 i 行第 j 个元素的地址
// *(pTwoD_Array+m*i+j) 是一个值,即第 i 行第 j 个元素
}
}
for (i=0;i<n;i++ )
{
for (j=0;j<m;j++ )
{
printf("%d ",*(pTwoD_Array+m*i+j));
}
printf("\n");
}
//printf("%d\n",n);
free(pTwoD_Array);
}