文章目录

  • 前言
  • 一、数组符号 [] 与 指针 * 符号 使用效果 基本等价
  • 二、数组首地址 与 指针 本质区别

前言

参考 【C 语言】指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方式 | 字符串 | 指针数组 | 数组指针 | 多维数组 | 多维指针 | 数组参数 | 函数指针 | 复杂指针解读) 博客 , 进行理解 ;

一、数组符号 [] 与 指针 * 符号 使用效果 基本等价


在上一篇博客 【C 语言】字符串操作 ( 使用 数组下标 操作字符串 | 使用 char * 指针 操作字符串 ) 中 , 使用 数组符号 [] 与 指针 * 操作 都可以实现 字符串访问 , 因此 这两种操作是有某种联系的 ;

数组符号 [] 与 指针 * 符号操作 , 两种表示方式是等价的 ;

数组符号 [] 本质 : p[i] 表示方式 与 *(p + i) 表示方式是等价的 ;

  • p[i] 方式更加符合 人类的 认知阅读习惯 ;
  • *(p + i) 方式 更加符合 编译器 的 寻址机制 ;

从 数组符号 [] 到 指针 * 符号 的推演 : p[i] 可以理解为 p[0 + i] , p[0 + i]p 指针变量可以放在下标中 , p + i 表示第 i 个元素的地址 , *(p + i) 表示第 i 个元素的值 ;

二、数组首地址 与 指针 本质区别


编译器 一旦遇到 数组定义 , 如

int array[10];

这个 array 可以看做一个指针 , 而且是常量指针 , 该指针不能改变 指向 ;

数组首地址 array 的值 是不可以改变的 ;

普通的指针 , 是可以改变其指向的 ;

数组 声明后 是一个 栈内存 变量 , 在函数生命周期结束后 , 该变量还需要进行 回收 , 回收的 依据是 数组的首地址 ;

如果在使用 数组 的过程中 , 修改了 数组 首地址值 , 就会造成 无法回收内存 ;

这是为了保证 栈内存 中 局部变量 内存 的 安全性 , 使 数组 首地址 无法进行修改 , 是一个常量指针 ;

【C 语言】数组与指针操作 ( 数组符号 [] 与 指针 * 符号 的 联系 与 区别 | 数组符号 [] 与 指针 * 符号 使用效果 基本等价 | 数组首地址 与 指针 本质区别 )相关推荐

  1. c语言把结构体首地址放入指针,C语言基础———指针,结构体指针,函数指针

    指针基础 一 指针就是地址,地址就是指针.指针存储的是内存的地址. 二 指针的定义 1.&表示取址运算符,&a 可以取到 a 在内存中的地址;打印地址的占位符为(%p),printf( ...

  2. 函数名/函数地址/函数指针

    转自:http://hi.baidu.com/%C6%BF%D6%D0%B5%C4%C5%AE%CE%D7/blog/item/387db9ddaa54d0a9cd1166fa.html 函数指针:1 ...

  3. C语言指针操作字符数组demo

    C语言指针操作字符数组demo,本意是使用指针操作source,函数调用一次取16个字节,调用两次获取到整个数据. char source[32] = {0}; int *header = (int ...

  4. c语言如何用指针操作一维字符数组,C语言中数组和指针的互操作

    C是一种怀旧的语言,因为它的历史很久远,然而自从各种面向对象的编程语言的相续出现让它的影响力日减.当然了,这是无可非议的,但是C的高效性是其他语言无妨比拟的,所以我们有必要把握其中的精华与奥妙,也就有 ...

  5. 【C 语言】数组 ( 数组取值操作 | array[i][j] 用法 等价于 *( *(array = i) + j ) 用法 | 下标操作到指针操作演化过程 )

    文章目录 一.数组取值操作方法 二.一维数组取值 下标操作到指针操作 演化过程 三.二维数组取值 下标操作到指针操作 演化过程 一.数组取值操作方法 给定一个二维数组 : int array[2][3 ...

  6. 【C 语言】字符串操作 ( 使用 数组下标 操作字符串 | 使用 char * 指针 操作字符串 )

    文章目录 一.使用 数组下标 或 指针 操作字符串 1.使用 数组下标 操作字符串 2.使用 char * 指针 操作字符串 二.代码示例 一.使用 数组下标 或 指针 操作字符串 1.使用 数组下标 ...

  7. 在c语言函数调用中用指针操作数组

    直接上代码 #include<iostream>using namespace std;int p[20];void change(int *p){for(int i = 1; i < ...

  8. c++如何打印一维数组首地址_C语言之二维数组和指针的结合

    最近在练习 C 语言计算机二级的程序设计题,碰到了二维数组和指针的结合,当时怎么调试都不对,自己也记不清楚该怎么用了就跑去看书翻资料重新复习.自己纠结的问题是二维数组 int a[3][4]的数组名是 ...

  9. php 数组 指针,PHP数组指针操作

    日常开发过程中,接触最多的莫过于是数组了,但是数组的操作我们一般都是用来做读写的,很少操作到有关游标(指针),但是再实际的时用中,如果利用了游标,我们的开发速度及效率会大大的提高. PHP中有关数组指 ...

最新文章

  1. 【Qt】信号和槽对值传递参数和引用传递参数的总结
  2. WindowsForm 计算器
  3. python的函数的定义与调用
  4. 实验吧—部分MISC Write up
  5. MySQL计划任务3(转)
  6. 程序员的进阶课-架构师之路(大纲)-思维导图
  7. SQL Sever 错误和异常处理
  8. Ubuntu sublime text 3无法输入中文的解决办法
  9. 使用excel绘制统计分布表(T分布表)
  10. win+ubuntu系统引导修复
  11. python好用的软件_新手写Python程序有什么推荐好用编辑器
  12. 修改XP登陆界面教程
  13. CV领域的实验室及研究组
  14. 外卖霸王餐返利小程序开发制作功能介绍
  15. 去social一下什么意思_bbs论坛是什么意思(论坛的含义)
  16. php onblur=,onblur
  17. Well-ordered String
  18. windows桌面待办事项_苹果iPhone手机上有什么好用的管理待办事项的桌面便签软件吗?...
  19. DIY回收,UCONN的开放源化学书以及更多新闻
  20. 传真存储转发工作过程

热门文章

  1. MySQL备份恢复工具xtrabackup
  2. 扩展KMP --- HDU 3613 Best Reward
  3. 快速学习使用 Windows Azure 上的 SharePoint Server 2013
  4. vs2012 智能提示消失解决办法
  5. 【sping揭秘】9、容器内部事件发布(二)
  6. 03-cmake语法-变量,字符串
  7. 基于吉日嘎拉的通用权限管理WebForm版扩展:字典选项管理和缓存管理
  8. code first基础
  9. 收回误删并清除了回收站的文档
  10. 大理,风花雪月俏丽金花