c语言指针与数组

  • **一、指针与一维数组**
    • 1.一维数组的存储方式
    • 2. 对一维数组名的理解
    • 3. 数组下标和指针的关系
    • 4.一位数组名与取数组首地址的区别
  • **二、指针与二维数组**
      • 1.二维数组的存储方式
      • 2.二维数组下标和指针的对应关系
    • 例题:
怀着忐忑的心情写了人生第一篇博客......诚惶诚恐......

主要内容:本篇博客主要是较为详细的解释指针与一维、二维数组的联系

一、指针与一维数组


1.一维数组的存储方式

  • 当我们定义了一个一维数组a时,编译器就会根据数组a的类型和元素个数分配一定的内存空间(该内存单元一定是连续的),并且这个内存单元一旦分配,便不会改变。

2. 对一维数组名的理解

  • 单独的一维数组名是一个指针常量,存放的是一维数组第一个元素的地址。 例:int a[2];
    对于数组a,如果我们单纯只是调用数组名a,它代表着数组首个元素即a[0]的地址。

3. 数组下标和指针的关系

  • 对于数组a[i],它永远等价于*(a+i)。

4.一位数组名与取数组首地址的区别

int array[5] = {1,2,3,4,5};
printf("%d  %d  %d",array,,&array,&array[0]);
  • 由上述代码的输出结果我们可以知道array、&array与&array[0]的值是一样的。但是其意义是完全不一样的。array和&array[0]是一样的,代表数组首元素的地址;而&array代表整个数组的首地址。
    分开来看,array是一个地址,它也可以看作为array+0,而*(array+0)又是数组第一个元素的内容,也就 是array[0],所以array就是下表为0的元素的地址。
    对于&array,它是变量array的地址,而变量array的偶用范围是四个int空间,如果我们将&array赋给某 个变量p,那么p的类型应该是:int (*)[4]; 也就是指向包含4个int数据的数组的指针。
    之前看到过一个很通俗的例子:就像是陕西省政府在西安,而西安的市政府也在西安,两个政府都在线,其 代表的意义却完全不一样。

二、指针与二维数组


1.二维数组的存储方式

  • 按照先后的顺序依次储存,当把每一行看作一个整体,即视为一个大的数组元素时,这个存储的二维数组也就变成了一个一维数组了。而每个大数组元素对应二维数组的一行,我们就称之为数组元素,显然每个行的数 组元素都是一个一维数组。

2.二维数组下标和指针的对应关系

对于 int a[3] [3],数组名a是数组首元素的地址。
&a代表整个数组,+1直接跳到数组末,是a升一级。
a是行行指针,+1跳到下一行。
*a是第一个数的指针,+1跳到下一个数。对于二维数组每一行都对应一个行地址,二维数组的地址就是第一行地址。
行地址:
a:第一行地址。
a+1:第二行地址
a+2:第二行地址
列地址:
a[0]+0:第一列地址
a[0]+1:第二列地址
a[0]+2:第二列地址

例题:

#include <stdio.h>
int main (void)
{int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}};int * pa[3] = { a[0] , a[1] , a[2] };int *p = a[0];int i;for( i=0; i<3; i++ ){printf(" %d   %d  %d",a[i][2-i],*a[i],*(*(a+i)+i)); printf("\n");  //*(*(a+i)+i),a+i//是矩阵a的第i行的地址,*(a+i)将被求第i行的第一个元素的地址。*(a+i)+i将被求值为第i行的第i//个元素的地址。*(*(a+i)+i)将被求值为第i行中的第i个元素的int整数值。}for( i=0; i<3; i++ ){printf("%d   %d",*pa[i],p[i]);printf("\n");}return 0;
}

结果:

a[i][2-i]  =  3   *a[i]  =  1   *(*(a+i)+i)  =  1
a[i][2-i]  =  5   *a[i]  =  4   *(*(a+i)+i)  =  5
a[i][2-i]  =  7   *a[i]  =  7   *(*(a+i)+i)  =  9
*pa[i]  =  1   p[i]  =  1
*pa[i]  =  4   p[i]  =  2
*pa[i]  =  7   p[i]  =  3

c语言指针和数组的联系相关推荐

  1. c语言指针数组课件,C语言指针与数组教程课件.ppt

    C语言指针与数组教程;教学要求;本章主要内容;引子;#include void swap ( int x, int y ) { printf("调用时:x地址为:%p, 值为:%d\n&qu ...

  2. C语言 指针和数组区别 - C语言零基础入门教程

    目录 一.前言 二.指针和数组区别 1.通过 sizeof 获取大小 a.计算数组大小 b.计算指针大小 2.指针和数组赋值方式不同 a.指针赋值 b.数组赋值 3.指针是指针变量,数组是指针常量 三 ...

  3. C语言中指针与数组的区别,C语言 指针与数组的详解及区别

    C语言 指针与数组的详解及对比 通俗理解数组指针和指针数组 数组指针: eg:int( *arr)[10]; 数组指针通俗理解就是这个数组作为指针,指向某一个变量. 指针数组: eg:int*arr[ ...

  4. 指针c语言与数组,C语言指针与数组

    C语言指针与数组 数组的下标应该从0还是1开始? 我提议的妥协方案是0.5,可惜他们未予认真考虑便一口回绝    -- Stan Kelly-Bootle 1. 数组并非指针 为什么很多人会认为指针和 ...

  5. c语言指针与数组的深入理解

    引言:本篇再一次写到指针,学过c语言的都知道,指针是初学c语言时候遇到的一个比较难搞的知识点.你尽管可以想的简单,但是其实如果去用的话,没有一个更加深入的理解,那么后续的学习到数据结构就会艰难无比. ...

  6. c语言指针数组 难点总结,C语言指针与数组的难点分析.pdf

    C语言指针与数组的难点分析,c语言指针数组,c语言二维数组指针,c语言指针数组初始化,c语言函数指针数组,c语言数组与指针,c语言结构体数组指针,c语言指向数组的指针,c语言字符串数组指针,c语言数组 ...

  7. c 语言 指针 指向数组,C 指向数组的指针

    您可以先跳过本章,等了解了 C 指针的概念之后,再来学习本章的内容. 如果您对 C 语言中指针的概念有所了解,那么就可以开始本章的学习.数组名是一个指向数组中第一个元素的常量指针.因此,在下面的声明中 ...

  8. C语言指针和数组的天生姻缘

    指针和数组的天生姻缘 以指针的方式来访问数组 指针和下标访问数组的本质 数组和指针并不是相等的 从内存角度理解指针访问数组的实质 指针和数组类型的匹配问题 以指针的方式来访问数组 数组元素使用时不能整 ...

  9. C语言指针、数组与sizeof运算符

    指针.数组与sizeof运算符 指针.数组与sizeof运算符 指针.数组与sizeof运算符 Sizeof是C语言的一个运算符,sizeof的作用是用来返回()里面的变量或者数据类型占用的内存字节数 ...

最新文章

  1. 自学python需要的软件-学习Python,从入门到精通,其实只需要两个月就够了
  2. 【javascript】函数调用的对象和方法
  3. 1154:LETTERS
  4. mysql5.7 忘记root密码后,如何找回密码?
  5. Python装饰器之property()详解
  6. vue弹出alert_vue+webpack 实现简单的弹窗(alert)组件
  7. 怎么设置班级文件服务器,如何开设论坛如题下学期老师组织学生开一个班级论坛有专用服务器接下 爱问知识人...
  8. 百度SEO最新强引蜘蛛软件工具
  9. Struts2 ( 二 )
  10. Android开发与Sequoyah的安装问题
  11. 阿里达摩院提出新型优化方法,一行代码即可替换现有优化器
  12. C语言之while和do-while
  13. st.getParameter() 和request.getAttribute() 区别 https://terryjs.iteye.com/blog/1317610
  14. Java Web开发学习手册_Java Web实战开发完全学习手册
  15. C语言编程题——杨辉三角
  16. Python脚本秒换壁纸
  17. v中国瓶装水市场营销状况与销售动态分析报告2022-2027年
  18. 【干货】消费金融助贷业务实操全速览
  19. 微信接口第三方php原理,微信第三方登录原理
  20. Conflux 请你“出名”啦!

热门文章

  1. SpringBoot2 集成 xxl-job任务调度中心
  2. VS Code 批量操作
  3. linux下后台启动springboot项目
  4. Centos7 查看/关闭/启动防火墙
  5. Git + GitHub 超详细知识笔记整理
  6. Java-类加载器-类运行时结构-。。。。
  7. 编写一个C程序,实现以下功能:用一个函数实现两个字符串的比较,即自己写一个strcmp函数,函数原型为:int strcmp(char *p1,char *p2);设p1指向字符串s
  8. android 4.4 屏幕方向,Android4.4屏幕旋转功能
  9. mysql getline_getMessage(),getFile,getLine获取异常用法
  10. try-catch 异常处理的执行过程