第十一章、指针和数组

11.1指针和一维数组

//数组名的意义以及在访问数组元素中的作用
#include<stdio.h>
int main()
{
    int a[5],i;
    for(i=0;i<5;i++)
    {
        scanf("%d",a+i);//a+i等于&a[i]
    }
    for(i=0;i<5;i++)
    {
        printf("%d ",*(a+i));//*(a+i)等于a[i]
    }
    return 0;
}
//指针运算的特殊性以及在访问数组元素中的作用
//p+1不改变当前指针的指向,p仍然指向原来指向的元素;p++中p指向下一个元素,但是二者都表示指向下一个元素
#include<stdio.h>
int main()
{
    int a[5],*p;
    for(p=a;p<a+5;p++)
    {
        scanf("%d",p);//指针法引用数组元素
    }
    for(p=a;p<a+5;p++)
    {
        printf("%d ",*p);
    }
    return 0;
}
#include<stdio.h>
int main()
{
    int a[5],i,*p=NULL;
    p=a;
    for(i=0;i<5;i++)
    {
        scanf("%d",&p[i]);//相当于p+i、a+i、&a[i]
    }
    for(i=0;i<5;i++)
    {
        printf("%d ",p[i]);//相当于*(p+i)、*(a+i)、a[i]
    }
    return 0;
}

11.2指针和二维数组的关系

/*
int a[3][4];
a+i->&a[i] 代表行地址
a[i]+j 代表&a[i][j]
*(a[i]+j) 代表a[i][j]
a[i][j]<->*(a[i]+j)<->*(*(a+i)+j)<->(*(a+i))[j]
*/
//通过二维数组的行指针和列指针来引用二维数组元素
/*
定义一个二维数组的行指针:
int (*p)[4];
定义了指向含有4个元素的一维整型数组的指针变量
p++指向下一行元素
int *p;
p=&a[0][0];  //定义了一个列指针并初始化
p++指向下一个元素的地址
*/
#include<stdio.h>
#define N 4
void InputArray(int *p,int n,int m)
//void InputArray(int (*p)[N],int n,int m)
{
    int i,j;
    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
        {
            scanf("%d",&p[i*m+j]);
        }
    }
}
void OutputArray(int *p,int n,int m)
//void OutputArray(int (*p)[N],int n,int m)
{
    int i,j;
    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
        {
            printf("%d ",p[i*m+j]);
        }
    }
}
int main()
{
    int a[3][4];
    //InputArray(a,3,4);
    //OutputArray(a,3,4);
    InputArray(*a,3,4);
    OutputArray(*a,3,4);//向二维数组传递0行0列的地址
    return 0;
}
发布了34 篇原创文章 · 获赞 2 · 访问量 460

猜你喜欢

转载自blog.csdn.net/qq_42148307/article/details/105041297