指针提供了一种用来使用地址的符号方法,可以很有效地处理数组

数组标记实际上是一种变相使用指针的形式

数组名同时也是该数组首元素的地址,如果arr是一个数组,则:

arr == &arr[0];

在C中,对一个指针加1的结果是对该指针增加一个存储单元(storage unit);对于数组,地址会增加到下一个元素的地址,而不是下一个字节

因此在声明指针时必须声明其所指向对象的类型

计算机需要知道存储对象所用的字节数,因此只有地址信息是不够的


1)指针的数值就是其所指向的对象的地址,地址内部表示方式是由硬件决定,很多计算机都是以字节编址的,即对每个内存字节顺序进行编号,对于包含多个字节的数据类型,对象的地址通常指的是其首字节的地址

2)在指针前运用运算符 *就可以得到该指针所指向的对象的数值

3)对指针加1,等价于对指针的值加上它指向的对象的字节大小

arr + 2 == &arr[2]    // 相同的地址
*(arr + 2) == arr[2]  // 相同的值

数组和指针的密切关系:可以用指针标识数组的每个元素,并得到每个元素的数值;本质上,对同一个对象有两种不同的符号表示方法

* (arr + 2) // arr的第3个元素的值
* arr + 2   // arr的第1个元素的值加2// 间接运算符(*)的优先级高于+

了解数组和指针的密切关系,编程时可以方便地选择两者中任意一种方法

示例代码:输入年份,显示该年每个月的天数

#include <stdio.h>#define MONTHS 12int main(void)
{int days1[MONTHS] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};int days2[MONTHS] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};int year;int index;printf("please enter the year(for example 2022): \n");scanf("%d", &year);if(year % 4){for(index = 0; index < MONTHS; index++){printf("Month %d has %d days. \n", index + 1, days1[index]); // 数组表示printf("Month %d has %d days. \n", index + 1, * (days1 + index)); // 指针表示}}else{for(index = 0; index < MONTHS; index++){printf("Month %d has %d days. \n", index + 1, days2[index]); // 数组表示printf("Month %d has %d days. \n", index + 1, * (days2 + index)); // 指针表示}}return 0;
}

运行结果:

示例结果说明:使用数组和指针的运行结果一致;指针和数组时两个等效的方法;可以使用指针标记数组,反之亦然

再学C语言36:指针和数组相关推荐

  1. 【C 语言】指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方式 | 字符串 | 指针数组 | 数组指针 | 多维数组 | 多维指针 | 数组参数 | 函数指针 | 复杂指针解读)

    相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...

  2. c语言常量l12和意义,课件c语言l12_指针和数组

    <课件c语言l12_指针和数组>由会员分享,可在线阅读,更多相关<课件c语言l12_指针和数组(42页珍藏版)>请在人人文库网上搜索. 1.计算机程序设计基础第12讲指针和数组 ...

  3. C语言 使用指针遍历数组 - C语言零基础入门教程

    目录 一.使用数组下标遍历数组 1.计算数组元素个数 2.通过下标遍历数组 二.使用数组首地址偏移遍历数组 三.使用指针遍历数组 四.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目 ...

  4. c语言指针数组 难点总结,C语言之指针与数组总结

    和指针相关的问题口诀1: 1. 地址变量得地址,得谁地址指向谁 和指针相关的问题要画图: 内容变量画房子,指针画箭头 ---->口 ------------------------------- ...

  5. C语言之指针与数组总结

    和指针相关的问题口诀1: 1. 地址变量得地址,得谁地址指向谁 和指针相关的问题要画图: 内容变量画房子,指针画箭头 ---->口 ------------------------------- ...

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

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

  7. 国2c语言中指针与数组的赋值运算,C语言到汇编-指针与数组2

    本章剩下的内容主要有: 1.指针与数组 & 地址算术运算 2.字符指针与函数 3.多维数组 & 指针与多维数组 4.指向函数的指针 每个内容举一个例子,第一个例子: int a[10] ...

  8. 水滴石穿C语言之指针、数组和函数

    基本解释 1.指针的本质是一个与地址相关的复合类型,它的值是数据存放的位置(地址):数组的本质则是一系列的变量. 2.数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容 ...

  9. C语言中指针和数组的区别

    看<C专家编程>一书,看到数组与指针并不相同一章,遂做了一段测试: 代码: #include <stdio.h> #include <stdlib.h>int ma ...

最新文章

  1. 在C语言中break语句称为,在C语言中,break语句的功能是退出函数
  2. linux下 /etc/profile、~/.bash_profile ~/.profile的执行过程
  3. 新疆大学OJ(ACM) 1099: 数列有序!
  4. CSS系列:CSS中盒子模型
  5. IntelliJ如何设置自动导包
  6. 信息学奥赛一本通C++语言——1038:苹果和虫子
  7. java 小票打印_java 调收银机打印小票
  8. python程序中的内存泄露(matplotlib内存泄漏)
  9. 一个动态增长的栈实现
  10. DDOS 攻击工具
  11. python的全局变量和局部变量
  12. 翁恺老师的c语言学习笔记
  13. h5算命php源码,H5付费算命PHP源码那么火_付费算命源码如何下载
  14. mysql bug frash_MySQL Flush导致的等待问题
  15. 南华大学计算机学院龚向坚,李跃-计算机科学与技术学院
  16. 如何判断您是否拥有32位或64位版本的Google Chrome浏览器
  17. 用cout输出uchar(unsigned char)变量时,没有输出结果怎么办?
  18. 论文精读:Selective Convolutional Descriptor Aggregation
  19. 《计算机网络(第七版)-谢希仁》重点知识 - 计算机网络基础知识
  20. 数据结构—排序二叉树

热门文章

  1. greenplum集群
  2. linux 蓝牙r232,R232串口及串口线
  3. web前端基础教学视频分享(二)html5+css3基础教学
  4. 基于国产UOS操作系统的Samba服务
  5. 配置eslint+prettier报错Error: Cannot read config file: /Users/qiandingwei/Documents/projects/creams-main
  6. 交换机的级联、堆叠和集群
  7. element ui rules校验记录,方便后续使用
  8. sklearn.impute.KNNImputer插值寻找近邻的原理
  9. 3.数据预处理 Preprocessing Impute
  10. winxp 更改计算机名,winxp netbios计算机名修改方法【图文】