码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • C语言:数组指针


    数组指针

    定义:指的是数组名的指针,即数组首元素地址的指针。即是指向数组的指针。 数组指针也叫行指针。
    例:int (*p)[10]; p即为指向数组的指针,又称数组指针。

    性质:数组指针用于指向一个数组,其本质为指针;

    ()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长,也就是说执行p+1时,p要跨过n个整型数据的长度。

    举个栗子:

        int arr[10]={1,2,3,4,5,6,7,8,9,10};
        int (*p)[10]=&arr;//数组的地址要存起来
        //上面的p就是数组指针
        int i=0;
        for(i=0;i<10;i++)
        {
            printf("%d ",*(*p+i));//第一种方法打印数组
        }
        printf("\n");
        for(i=0;i<10;i++)
        {
            printf("%d ",(*p)[i]);//第二种方法打印数组
        }
        printf("\n");
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    数组指针一般是用在二维数组中,例如:

    //参数是指针的形式
    void print(int(*p)[5],int x,int y)
    {
        int i=0;
        for(i=0;i<x;i++)
        {
            int j=0;
            for(j=0;j<y;j++)
            {
                printf("%d ",*(*(p+i)+j));//*(p+i)=p[i],所以*(*(p+i)+j)=p[i][j]
            }
            printf("\n");
        }
    }
    
    int a[3][5]={{1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7}};
    print(a,3,5);
    //1 2 3 4 5
    //2 3 4 5 6
    //3 4 5 6 7
    //此处将每一行看成一个元素,利用数组指针将二维数组看成一维数组int [5]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    一维数组指针和二维数组指针相关区别

    一、指向一维数组的指针变量设一维数组为a[n]

    定义方法:* 指针变量名即 * P
    这个p一般指向的一维数组的首地址,即p=a,或者p=&a[0];p,a,&a[0]均指向同一单元,它们是数组a的首地址,也是0号元素a[0]的首地址。p+1,a+1,&a[1]均指向1号元素a[1]。类推可知p+i,a+i,&a[i]。

    二、指向二维数组的指针变量设二维数组为a[m][n]

    定义方法:(*指针变量名)[长度]即(*P)[n]
    “长度”表示二维数组分解为多个一维数组时,一维数组的长度,也就是二维数组的列数。

    关于指针数组,我们大致遵循以下规则:

    (1)访问数组元素,要么用下标法 [],要么用指针*.

    (2)一维数组用一个下标,二维数组用两个下标

    (3)指针指向数组元素时,指针表示数组元素的地址,用 * 对这个地址运算就求出了这个地址(即数组元素)的值

    (4)指针数组指向二维数组时,因为它本身是个指向数组的指针,所以它的内层每加一,就相当于下一个数组

  • 相关阅读:
    acwing算法基础之基础算法--浮点数二分算法
    大数据讲课笔记1.5 使用Vim编辑器
    动态规划34(Leetcode337打家劫舍3)
    报名仅剩一周!课程直播和1V1指导助力文心一言插件开发赛事冲榜
    Blazor实战——Known框架多表增删改查
    就是这个问题,感觉就是硬件不兼容
    Vue子组件向父组件数据传递,非父子组件数据传递,单向数据流&组件双向数据共享
    Reinforcement Learning in the Era of LLMs: What is Essential? What is needed?
    设计模式(八)组合
    Linux下 gdb 调试打印进程内存信息
  • 原文地址:https://blog.csdn.net/qq_57430594/article/details/128037423
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号