首页 > 其他 > 详细

20130330 printf数组改变 数组指针便利二维数组 二级指针遍历二维数组 ZigZag

时间:2014-03-31 10:32:04      阅读:444      评论:0      收藏:0      [点我收藏+]

1、为什么printf之后数组的值会改变?

bubuko.com,布布扣
#include<stdio.h>
    const int N=8;
int * Zigzag()
{
    int i=0,j=0,limit=0;
    int count=0;
    int cross=0;
    int a[N][N];
    int (*p)[N]=a;
    for(cross=0;cross<N;cross++)
    {
        if(0==cross%2)
        {
            for(i=cross;i>=0;i--)
            {
                p[i][cross-i]=count;
                count++;
            }
        }
        if(1==cross%2)
        {
            for(i=0;i<=cross;i++)
            {
                p[i][cross-i]=count;
                count++;
            }
        }
    }

    return  &p[0][0];
}
void print(int a[])
{
    for(int i=0;i<N;i++)
    {    
        for(int j=0;j<N;j++)
        {    
            printf("%6d",a[i*N+j]);
        }
        printf("\n");
    }
}
int main()
{
    int *a;
    a=Zigzag();
printf("a:0x%x\n",a);
printf("%d ",*a);
printf("%d ",*(a+1));
printf("%d ",a[2]);
printf("%d ",a[3]);
//    print(a);
}
bubuko.com,布布扣

2、理解数组指针

bubuko.com,布布扣
#include<stdio.h>
void main()
{
    const int N=3;
    int a[N][N]={{1,2,3},{4,5,6},{7,8,9}};
    int (*p)[N]=a;
    int *pp=&a[0][0];
    printf("a:0x%x\n",a);
    printf("p:0x%x\n",p);
    printf("*p:0x%x\n",*p);
    printf("p+1:0x%x\n",p+1);
    printf("*p+1:0x%x\n",p+1);

}
bubuko.com,布布扣

3、N*N ZigZag数组

http://blog.csdn.net/fanzitao/article/details/7934659

bubuko.com,布布扣
#include<stdio.h>
const int N=8;

void print(int (*a)[N])
{
    for(int i=0;i<N;i++)
    {    
        for(int j=0;j<N;j++)
        {    
            printf("%6d",a[i][j]);
        }
        printf("\n\n");
    }
}
int main()
{

    int i=0,j=0,limit=0;
    int count=0;
    int cross=0;
    int a[N][N];
    int (*p)[N]=a;
    for(cross=0;cross<N;cross++)
    {
        if(0==cross%2)
        {
            for(i=cross;i>=0;i--)
            {p[i][cross-i]=count; count++;}
        }
        if(1==cross%2)
        {
            for(i=0;i<=cross;i++)
            {p[i][cross-i]=count;  count++;}
        }
    }
    
    limit=1;
        for(cross=N;cross<N+N-1;cross++)
        {
            if(0==cross%2)
                for(i=N-1;i>=limit;i--)
                {p[i][cross-i]=count; count++;}
                if(1==cross%2)
                    for(i=limit;i<=N-1;i++)
                    {p[i][cross-i]=count; count++;}
                    
            limit++;
        }
        print(a);
}
bubuko.com,布布扣

4、利用二级指针建立二维数组

bubuko.com,布布扣
#include<stdio.h>
#include<malloc.h>
#define  N 10
void main()
{
    int **a=(int **)malloc(N*sizeof(int));
    for(int i=0;i<N;i++)
        a[i]=(int *)malloc(N*sizeof(int *));
    for(int i=0;i<N;i++)
        for(int j=0;j<N;j++)
            a[i][j]=i;

    for(int i=0;i<N;i++)
    {
        for(int j=0;j<N;j++)
            printf("%6d",a[i][j]);
        printf("\n\n");
    }
}
bubuko.com,布布扣

20130330 printf数组改变 数组指针便利二维数组 二级指针遍历二维数组 ZigZag,布布扣,bubuko.com

20130330 printf数组改变 数组指针便利二维数组 二级指针遍历二维数组 ZigZag

原文:http://www.cnblogs.com/yexuannan/p/3634551.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!