数组指针 --本质上还是一个指针,只不过指向的是整个数组

1.定义方式

<存储类型> <数据类型> (*变量名)[数组元素的个数]
 int a[9] = {1,2,3,4,5,6,7,8,9};
int (*p)[9] = &a;//int (*)[9]//p ==&a
(*p)[1];
int *q = a;

2.数组指针指向二维数组--行指针

int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
int *p = a;
通过数组指针来取二维数组的元素:
    *((*(p+i))+j)
    p[i][j] -- (*(p + i))[j]
    *(p[i] + j)
    (*(p + i))[j]

举例说明:定义一个5x5 二维数组(整型),里面存放随机数(小于100),将每一行的元素按照从大到小排列(用数组指针实现)

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(int argc, char *argv[])

    int a[5][5] ={0};
    int (*p)[5] = a;
    int temp;
    srand(time(NULL));
    for(int i = 0;i < 5;i++)
    {
        for(int j = 0;j < 5;j++)
            a[i][j] = rand()%100;
    }
    printf("befor sort:\n");
    for(int i = 0;i < 5;i++)
    {
        for(int j = 0;j < 5;j++)
            printf("%5d ",a[i][j]);
        printf("\n");
    }
    for(int i = 0;i < 5;i++)
    {
        for(int j = 0;j < 4;j++)
        {
            for(int n = 0;n < 4 - j;n++)
            {
                if((*(p+i))[n] <  p[i][n+1])
                {
                    temp = p[i][n];
                    p[i][n] = p[i][n+1];
                    p[i][n+1] = temp;
                }
            }
        }
    } 

    printf("after sort:\n");
    for(int i = 0;i < 5;i++)
    {
        for(int j = 0;j < 5;j++)
            printf("%5d ",a[i][j]);
        printf("\n");
    }
    return 0;

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值