昨天收到一奇葩程序 乱用指针的。。修改后一直想记录下。。。
感觉需要注意,,,,
typedef int A[2];
A b[3]={32,11,23,45,6,7};
printf("\n%d",b[1][0]);
可以看出,先定义一种新的数据类型 A,他是一个 2个元素的一维数组。然后再定义一个含有
3个 A 类型的一维数组b,这样b其实就是一个二维数组了,b[3]代表的是有3行这样的一维数组
所以这样下来实际上等效于 b3。
但是 对于 typedef int array2 情况就不同了
array a[10];
array *p;
p=a;
我们需要另外的一种中理解方式
指针需要好好的理解
额。。。
直接看代码和执行效果去理解吧
对于p 是一个指向 array2 单元的指针
对其中的值进行操作的时候 需要 (*p)x=n 进行赋值操作
同理 取地址 &((*p)m)
下方是某孩子的程序 由于不了解指针导致错误
注释中是给他修改后的正确的用法
看到这个错误的程序的时候 很兴奋。。。。指针的可爱之处。。
#include <stdio.h>
#define N 3
typedef int array[2][2];
int input(array *p){
printf("请输入N个矩阵\n");
int i,m,n,x,y;
for(i = 1; i <= N; i++)
{
printf("第%d个矩阵为:\n",i);
for(m = 0; m < 2; m++)
for(n = 0; n < 2; n++)
{
scanf("%d",p[m][n]));
//scanf("%d",&((*p)[m][n]));
}
p++;
}
}
int output(array *p)
{
int i,x,y;
printf("输出N个矩阵:\n");
for(i = 1; i <= N; i++)
{
for(x = 0; x < 2; x++)
{
for(y = 0; y < 2; y++){
printf("%d ",p[x][y]);
//printf("%d ",(*p)[x][y]);
printf("\n");
}
printf("\n");
p++;
}
}
int main(int argc, char *argv[]){
array a[N];
input(&a);
output(a);
return 0;
}
/*
输入:
请输入N个矩阵
第1个矩阵为:
0 1 2 3
第2个矩阵为:
4 5 6 7
第3个矩阵为:
8 9 10 11
错误用法的输出:
输出N个矩阵:
0 1
4 5
4 5
8 9
8 9
10 11
正确的输出:
输出N个矩阵:
0 1
2 3
4 5
6 7
8 9
10 11
*/