C语言数组与指针的区别是什么?

一、问题

        常听说数组实质就是指针,是这样的吗?

二、解答

        数组是⼀组数,这组数⽤下标相区分,例如:

int a[5] = {1, 3, 5, 4, 8};

        产⽣5个数,这5个数是 a[0]、a[1]、…、a[4]。

        指针是⼀个变量的地址。例如:

int *p; 
int a = 5;
p = &a;

        p是另⼀指针变量,⽤于保存另⼀变量的地址。 这样说来,指针与数组间没有任何联系。 按上⾯的定义p和a,如果再有如下语句:

p = &a[0];

        这样,由于数组在内存中连续分配内存,(假设 a[0]地址为 2000,整型占两个字节),p的值是2000,*p为1,即 a[0]。

                        2000      1       a[0]2002      3       a[1]   2004      5       a[2]2006      4       a[3]2008      8       a[4]

        注意,p+1 的值不是 2001。C语⾔中 p+1的值是由P的定义来决定的,定义时指向⼏个字节的变量,指针加1就加⼏个字节。由于p的定义是 int*p: int 占两个字节,因此p+1 就是两个字节,是2002,正好就是 a[1]的地址。

因此:

p+1 值为2002,*(p+1)为5即 a[l]
p+i 即是&a[i],⽽*(p+i)即为a[i]

        以上int占两个字节只是⼀种假设,因为 int 所占字节数实际在不同系统中是不⼀样的, 但⽆论是两个字节还是四个字节,得到的结论是⼀样的。

        C语⾔中规定,数组名表⽰数组⾸地址,即: a 即为&a[0]
        因此:

a+1 即 *a[1];
*(a+1)即 a[l] 
*(a+i)即 a[i]

        C语⾔规定指针变量也可以表⽰成下标写法,即:

*(p+1)可以写成p[1]

        到此为⽌,数组的所有表示法 a[i],a+i,*(a+i) 都可以有对应的指针表⽰法 p[i],p+i,*(p+i),于是结论“数组即指针,指针即数组〞好像就成⽴了。

        其实这两种说法都是错的,只能说明在表示法上,⼆者可以有相同的⽅法。下⾯再对⼆者做⼀区分。

         数组名表示数组⾸地址,可以说数组名是数组的指针,但它不是变量,只是⼀个常量, 即不能对数组名a进⾏重新赋值。⽽指针变量是变量,可以重新赋值。

        程序中可以这样写:

p = &a[l];
p = p+1;
p++;

        以上写法都是正确的。

a = p;
a = a+1;
a++;

        以上三种写法试图对a的重新赋值都是错误的。

三、总结

        指针与数组是两个完全不同的概念,当⽤指针表示数组时,⼆者都有下标表示法和*号表示法,数组名是⼀数组的⾸地址,是常量,指针变量可以指向数组,是变量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/759829.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

刷题DAY28 | LeetCode 93-复原IP地址 78-子集 90-子集II

93 复原IP地址(medium) 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 ‘.’ 分隔。 例如:“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址&…

基于Java的桃花峪滑雪场租赁系统(Vue.js+SpringBoot)

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 游客服务2.2 雪场管理 三、数据库设计3.1 教练表3.2 教练聘请表3.3 押金规则表3.4 器材表3.5 滑雪场表3.7 售票表3.8 器材损坏表 四、系统展示五、核心代码5.1 查询教练5.2 教练聘请5.3 查询滑雪场5.4 滑雪场预定5.5 新…

算法打卡day22|回溯法篇02|Leetcode 216.组合总和III、17.电话号码的字母组合

算法题 Leetcode 216.组合总和III 题目链接:216.组合总和III 大佬视频讲解:组合总和III视频讲解 个人思路 在昨日做过的组合问题后,这道题的限制 多了两个:1.要找到和为n的k个数的组合,2.整个集合已经是固定的了[1,...,9]&…

用Python直接获取Word文档页数、字数、段落数、节数等信息

计算 Word 文档的页数、字数等信息是出版、学术和内容管理等领域的一项基本任务。准确的页数和字数对于评估文档长度、估算印刷成本、分析文本复杂性以及确保符合格式化指南至关重要。逐个预览文档查看相关信息是非常麻烦的事情,我们可以在不预览文档的情况下&#…

分享一篇Oracle RAC实战安装11G

分享一次很久以前的Oracle rac项目实施。 1、拓扑结构 基础环境是2台H3C的服务器2台3PAR的双活存储,操作系统centos7.2。借用下别人家的拓扑先(这是一套典型的RAC架构)。 2、网卡TEAM操作 以eno51和en052组成Team1组为示例: nm…

如何干好驻场运维服务

驻场运维包括第三方公司派遣,自己公司派遣的运维人员到用户现场处理问题。 其中有软件系统运维服务,基础环境运维服务,网络运维服务等。 以驻场的方式提供服务的形式。 驻场运维是一种趋势。 为什么要以驻场的形式去服务? 响应…

第十二届蓝桥杯大赛软件赛决赛C/C++ 研究生组-纯质数

直接判断数据过大 相对而言&#xff0c;由2&#xff0c;3&#xff0c;5&#xff0c;7组成的数更少&#xff0c;则先筛选出由2,3,5,7组成的数&#xff0c;再判断这些数中的质数个数即可 #include <iostream> using namespace std; int main() {printf("1903");…

3.7 RK3399项目开发实录-板载OpenWRT系统的使用(wulianjishu666)

STM32F103单片机从零到项目开发程序实例 下载链接&#xff1a;https://pan.baidu.com/s/1dWNskNinrMk4bxaE-jgHhQ?pwdymn3 1. OpenWRT 手册 1.1. 支持设备列表 主控板卡型号RK3568ROC-RK3568-PC/Station-P2 1.2. 登录 IP 、登录密码和 WIFI 名称 固件默认登录 IP 为 192.1…

化妆品行业电商数据分析

随着互联网经济的高速发展&#xff0c;电商已经成为化妆品经营的主要渠道之一。根据网络数据显示&#xff0c;11月全国化妆品网络活跃商品200万&#xff0c;零售总额为400亿。分区域来看&#xff0c;上海市、广东省、浙江省化妆品行业网络零售突出&#xff0c;三个区域网络零售…

2024.3.9|第十五届蓝桥杯模拟赛(第三期)

2024.3.9|十五届蓝桥杯模拟赛&#xff08;第三期&#xff09; 第一题 第二题 第三题 第四题 第五题 第六题 第七题 第八题 第九题 第十题 心有猛虎&#xff0c;细嗅蔷薇。你好朋友&#xff0c;这里是锅巴的C\C学习笔记&#xff0c;常言道&#xff0c;不积跬步无以至千里&…

JavaScript高级(十五)----promise.all

Promise.all方法使用场景 例如&#xff1a;用户点击按钮&#xff0c;会向服务器请求数据&#xff0c;但是数据分别是不同的后端接口获取的数据&#xff0c;需要展示在一个span中 如果用户还没请求完成 则span会显示加载中... 等待两个后端接口都返回了数据 才会将数据展示在sp…

webpack5零基础入门-10babel的使用

Babel JavaScript 编译器。 主要用于将 ES6 语法编写的代码转换为向后兼容的 JavaScript 语法&#xff0c;以便能够运行在当前和旧版本的浏览器或其他环境中 1.安装相关包 npm install -D babel-loader babel/core babel/preset-env 2.进行相关配置 2.1第一种写法是在webp…

聚类分析 | Matlab实现基于PCA+DBO+K-means的数据聚类可视化

聚类分析 | Matlab实现基于PCADBOK-means的数据聚类可视化 目录 聚类分析 | Matlab实现基于PCADBOK-means的数据聚类可视化效果一览基本介绍程序设计参考资料 效果一览 基本介绍 PCA&#xff08;主成分分析&#xff09;、DBO&#xff08;蜣螂优化算法&#xff09;和K-means聚类…

js手写快速排序

思路 找到一个基准元素&#xff0c;一般取第一个元素为基准元素然后从第二个开始比较&#xff0c;比基准元素大的放在基准元素在右边,比基准元素小的放在基准元素在左边然后对左右数组进行递归 快速排序 写法1 单独开辟两个存储空间left和right来存储每次递归比target小和大的…

正则表达式具体用法大全

# 正则表达式&#xff1a; ## 单字符匹配&#xff1a; python # 匹配某个字符串&#xff1a; # text "abc" # ret re.match(b,text) # print(ret.group()) # 点&#xff08;.&#xff09;&#xff1a;匹配任意的字符(除了\n)&#xff1a; # text "\nabc&quo…

输入框禁用状态 可清空输入框如何实现?组件写的

输入框禁用 通过 disabled 属性指定是否禁用 input 组件 <el-input placeholder"请输入内容" v-model"input" :disabled"true"> </el-input> <script> export default { data() { return { input: } } } </script> 可…

[套路] 浏览器引入Vue.js场景-WangEditor富文本编辑器的使用 (永久免费)

系列文章目录 [套路] el-table 多选属性实现单选效果[套路] 基于服务内存实现的中文拼音混合查询[套路] Bypass滑块验证码 目录 系列文章目录前言一、实现1.1 场景1.2 Window对象简介1.3 引入WangEditor1.4 页面配置 前言 公司使用freemarker的老旧SpringBootWeb后台项目, 前…

力扣热门算法题 59. 螺旋矩阵 II,60. 排列序列,61. 旋转链表

59. 螺旋矩阵 II&#xff0c;60. 排列序列&#xff0c;61. 旋转链表&#xff0c;每题做详细思路梳理&#xff0c;配套Python&Java双语代码&#xff0c; 2024.03.21 可通过leetcode所有测试用例。 目录 59. 螺旋矩阵 II 解题思路 完整代码 Java Python 60. 排列序列 …

adb logcat 命令使用

adb logcat 命令-CSDN博客 c fork, execl 参数 logcat | grep-CSDN博客 一.命令格式 adb logcat [选项] [过滤项], 其中 选项 和 过滤项 在 中括号 [] 中, 说明这是可选的; 选项解析: 1."-s"选项 : 只显示指定标签的日志; ------>adb logcat -s SWVDEC 显示SWVDE…

IDEA 2021.3.3最新激活破解教程(可激活至2099年,亲测有效)

下载地址&#xff1a;https://files.cnblogs.com/files/smallfa/ja-netfilter-all.rar?t1684636896&downloadtruehttps://files.cnblogs.com/files/smallfa/ja-netfilter-all.rar?t1684636896&downloadtrue1.Windows 系统下载解压到文件夹内&#xff0c;点击运行 ins…