首页 > 其他分享 >通过指针引用数组

通过指针引用数组

时间:2024-12-10 17:44:06浏览次数:6  
标签:++ scanf 元素 地址 引用 数组 指针

指针变量既可指向变量,又可指向数组元素(把数组某一元素的地址存放在指针变量),它们都有地址。数组元素的指针就是数组元素的地址。
可以由两种办法引用数组元素。
1.下标法,如a【1】;
2.指针法,如p=&a【0】(p为指针变量)等价于p=a。
在用指针变量引用数组有几个很重要的知识点。
1.假设a为数组名,当指针引用时相当于a【0】,将a首元素地址赋值给p(p=a);
2.p=&a【0】,int p=a(将a首元素地址赋值给p),int p=&a【0】完全等价。
3.在scanf函数中&可以不写如scanf(“%d”,p)或scanf(“%d”,a)前提是p和a都为指针变量。a可为数组名。但这样做相当与把输入的值直接存放到a或p中
image
4.对于按一定顺序输出数组元素所用for循环不再用
image
而可以将定义一个指针变量p使p++代替a【i】,这样的执行效率也高。由这个例子引出知识点5.
(1)p++==a【i】(i++);
(2)p--同上类型;
(3)
p++==
(p+1)(由于++与同优先级,结合方向自左向右,先引出p的值,实现p,再使p
自增)。引出下面一个知识点。
(4)当出现数组a【0】++这样的相当与a【0】的值加一等价于(p)++。
5.当指针变量已指向一个数组元素时,p+1,p-1代表指针的移动,分别指向上一个元素和下一个元素。
两个指针相减,如p1-p2(都指向同一个数组),代表所指元素的距离,具体计算(地址相减再除去指针变量类型的字节长),但p1+p2毫无实际意义。
如果p的初值为a【0】,那么p+i和a+i都代表a【i】的地址。
(p+i)和*(a+i)代表a【i】所指向的元素。
一个小tip:a【i】为数组名但实际上其实是地址,由直接访问(变量名加类型名、大小搜索),也就相当于地址。
6.可以有p【i】形式,但关键是看p所代表的是a数组中哪一号元素,若为【0】则p【i】相当于a【i】,若为【n】则为a【n+i】。
7.不能有a++的形式,因为a是一个常量代表数组首个元素的地址相当于a【0】;
8.函数可通过形参的改变改变实参也就是数组值。
知识点先这么多,有的话接下来补充。
例题辅助消化一下:
`#include<stdio.h>
int main()
{
int p,i,a[10];
p=a;
for(i=0;i<10;i++)
scanf("%d",p++);
for(i=0;i<10;i++,p++)
printf("%d\n",
p);
return 0;

}`
输出结果image
实际上这是因为在scanf中p++并非只是临时值,而是切实改变了,同理作为条件表达式时也是如此。容易栽坑。
只需要把p=a放scanf后即可。

标签:++,scanf,元素,地址,引用,数组,指针
From: https://www.cnblogs.com/szyw/p/18597755

相关文章

  • leetcode 2958. 最多 K 个重复元素的最长子数组
    2958.最多K个重复元素的最长子数组classSolution{public:intmaxSubarrayLength(vector<int>&nums,intk){intsize=nums.size(),resLenth=0;unordered_map<int,int>numAdded;for(intleft=0,right=0;right<siz......
  • C语言基础-数组:一维数组与二维数组
    数组例子如果我们要在程序中表示一个学生的成绩,我们会使用一个int来表示,假如我们要在程序中表示一组成绩,此时我们所学的常规的数据类型就无法再表示,这时就需要使用一种新的表现形式,这种表现形式就是数组什么是数组数组是相同类型,有序数据的集合数组的特征数组中的数据......
  • 数组去重:双指针法的优雅实现
    数组去重:双指针法的优雅实现在日常开发中,数组去重是一个常见的需求。无论是处理用户输入、数据清洗,还是优化算法性能,去重操作都扮演着重要角色。本文将介绍一种高效的去重方法——双指针法,并结合代码示例,帮助你轻松掌握这一技巧。1.问题描述给定一个包含重复元素的数组,要求删......
  • C语言整理第八章(指针)
    指针(二)一,字符指针变量(一)用字符指针指向字符串常量有两种方法初始化和赋值1,初始化intmain(){char*p="Doyouknow?";} 2,赋值intmain(){char*p;p="Doyouknow?";} 其实,无论是初始化还是赋值,都是将字符串的第一个字母的地址赋给指针变量(二)字......
  • 请说说JS中的索引数组、关联数组和静态数组、动态数组的定义与区别
    在JavaScript中,数组的概念比较灵活,不像一些强类型语言那样区分得那么严格。JS中的数组实际上是一种特殊的对象,既可以像索引数组一样通过数字索引访问元素,也可以像关联数组一样通过字符串键访问元素。所以,严格意义上来说,JS只有动态数组,它兼具了索引数组和关联数组的特性。而静......
  • 智能指针中的share_ptr(共享智能指针)
    初始化共享智能指针是指多个智能指针可以同时管理同一块有效的内存,共享智能指针share_ptr是一个模板类,如果进行初始化有三种方式如下:通过构造函数初始化std::makeshared辅助函数reset方法共享智能指针对象初始化完毕之后就指向了要管理的那块堆区内存,如果想......
  • JS代码片段-Array数组克隆的几种方法
    JavaScript自身提供了几种克隆数组的方法,以下做了汇总,以作参考:1.展开运算符(...) ES6引入了展开运算符(...),这是创建数组浅克隆最常见的方法。leta=[1,2,3,4,5];letb=[...a];2.Array.from()leta=[1,2,3,4,5];letb=Array.from(a);3.Array.prototype.s......
  • 一道C语言指针有关问题的讲解
    原题#include<stdio.h>intmain(){char*c[]={"ENTER","NEW","POINT","FIRST"};char**cp[]={c+3,c+2,c+1,c};char***cpp=cp;printf("%s\n",**++cpp);printf(&quo......
  • 初识C语言(指针、结构体)
    *前言学习C语言自用教材:C程序设计第五版--谭浩强线上课程:跟学博主:鹏哥C语言。视频:1.【初识C语言】认识C语言_哔哩哔哩_bilibili1.指针1.1内存内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的。为了有效的使用内存,把内存划分成一个个小的内存单......
  • 【Java编程】深入解析 Java 的四大引用类型:强引用、软引用、弱引用、虚引用
    在Java内存管理中,引用的概念扮演着非常重要的角色。引用的强弱程度,直接影响对象在内存中的生存周期。Java语言中定义了四种不同的引用类型:强引用、软引用、弱引用和虚引用,每一种引用类型都有独特的特性和适用场景。理解它们的区别和作用,不仅有助于提升Java内存管理的水平,也有......