typedef与指针

z4zr 2013-10-30 PM 2203℃ 0条

昨天收到一奇葩程序 乱用指针的。。修改后一直想记录下。。。
感觉需要注意,,,,

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

*/
标签: C/C++, 指针

非特殊说明,本博所有文章均为博主原创。

评论啦~