C语言:二维数组与指针

2022-10-26 16:11:52 浏览数 (1)

代码语言:javascript复制
#include<stdio.h> 
int main(){
    int a[3][4]={{1,2,3,4},{4,3,2,1},{5,6,7,8}};
    //a指向首行元素
    int b[3]={1,2,3};//指向一个元素
    printf("%dn",a);//指向首行元素的地址
    printf("%dn",a 1);//指向第二行元素的地址
    printf("%dn",*(a 0) 0);//指向行为0列为0的地址
    printf("%dn",*(a 0) 1);//指向行为0列为1的地址
    printf("%dn",a[0] 0);//指向行为0列为0的地址 
    printf("%dn",a[0] 1);//指向行为0列为1的地址
    printf("%dn",&a[0][1]);//指向行为0列为1的地址
    printf("%dn",*(*(a 0) 1));//指向行为0列为1的值
    printf("%dn",a[0][1]);//指向行为0列为1的值
    printf("%dn",*(a[0] 1));//指向行为0列为1的值
    return 0; 
}

int (*p)[4];表示定义了一个指针p,这个指针指向一行元素。这一行有4个元素。这指针p是指向一行有4个元素的指针。

代码语言:javascript复制
#include<stdio.h> 
int main(){
    int a[3][4]={{1,2,3,4},{4,3,2,1},{5,6,7,8}};
    int (*p)[4];
    p=a;
    for(int i=0;i<=2;i  ){
        for(int j=0;j<=3;j  ){
            printf("%d",*(*(p i) j)); 
        }
        printf("n");
    }
    return 0; 
}

指向函数的指针

函数的名称表示一个函数在内存中的起始地址,函数名称就是函数的指针(地址),所以可以定义一个指向函数的指针变量,用来存放某一个函数的起始地址。

指向函数的指针一般形式:

类型名 (*指针变量)(函数的参数列表)

例如:

代码语言:javascript复制
#include<stdio.h> 
int add(int a,int b);
int max(int a,int b);
int main(){
    int(*p)(int,int);
    p=add;
    int a=(*p)(4,5);
    printf("%dn",a);
    p=max;
    a=(*p)(4,5);
    printf("%dn",a);
    return 0;
}
int add(int a,int b){
    return a b;
}
int max(int a,int b){
    return a>b?a:b;
}

返回值为指针的函数

一个返回值为指针(地址)的函数,称为返回指针值的函数。

一般形式:类型名 *函数名(参数列表)

例如:有3个学生,每个学生有4门课程,要求用户输入学生的序号,输出该学生的所有课程成绩。

代码语言:javascript复制
#include<stdio.h> 
int main(){
    int *search(int(*p)[4],int n);
    int a[3][4]={{1,2,3,4},{4,3,2,1},{5,6,7,8}};
    int *p;
    p=search(a,1);//第二个学生
    for(int i=0;i<=3;i  ){
        printf("%d",*(p i));
    }
    return 0;
}
int *search(int (*p)[4],int n){//第n个学生的分数 
    int *pt;
    pt=*(p n);
    return pt; 
}

0 人点赞