前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >C++ 中关于指向数组的指针与指针数组的一些思考

C++ 中关于指向数组的指针与指针数组的一些思考

作者头像
耕耘实录
发布于 2022-05-09 08:17:59
发布于 2022-05-09 08:17:59
1.5K00
代码可运行
举报
文章被收录于专栏:耕耘实录耕耘实录
运行总次数:0
代码可运行

在 C++ 中,可以将一个指针指向某个数组,也可以使用一个指针数组指向一个数组。这二种方式的具体使用请看以下代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>

int main() {
    short tell[10] = {10, 2, 1, 3, 4, 5, 6, 7, 8, 9};
    std::cout << tell << std::endl;
    std::cout << &tell << std::endl;
    // 指向整个数组的指针与指向数组首地址的指针是相同的
    short *o = tell; // 指针指向数组的首地址,移动一次为 2 个字节。
    std::cout << *(o + 9) << std::endl;
    std::cout << *o + 9 << std::endl;
    short (*p)[10] = &tell; // 指针指向整个数组的地址,移动一次为 20 个字节。&tell是一个这样的指针,即指向包含10个元素的short数组(short (*) [10])。如果省略括号,优先级规则将使得 p 先与[10]结合,导致 p 是一个short指针数组,它包含10个元素。
    std::cout << *((*p) + 9) << std::endl;
    std::cout << *(*p + 9) << std::endl;
    return 0;
}

执行结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
0xffffcbd0
0xffffcbd0
9
19
9
9
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-02-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
C语言指针详解(文末有福利)
假如我们定义了 char a=’A’ ,当需要使用 ‘A’ 时,除了直接调用变量 a ,还可以定义 char *p=&a ,调用 a 的地址,即指向 a 的指针 p ,变量 a( char 类型)只占了一个字节,指针本身的大小由可寻址的字长来决定,指针 p 占用 4 个字节。
C语言与CPP编程
2020/12/02
5400
C语言指针详解(文末有福利)
指针数组和数组指针的简单理解
数组指针只是一个指针变量,似乎是C语言里专门用来指向二维数组的,它占有内存中一个指针的存储空间。指针数组是多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间。 还需要说明的一点就是,同时用来指向二维数组时,其引用和用数组名引用都是一样的。 比如要表示数组中i行j列一个元素: *(p[i]+j)、*(*(p+i)+j)、(*(p+i))[j]、p[i][j]
Twcat_tree
2022/11/30
6010
指针数组和数组指针的简单理解
指针
#define _CRT_SECURE_NO_WARNINGS 1 #include "test.h" int main() { //1、定义指针 int a = 10; //指针定义的语法 : 数据类型 * 指针变量名; int * p; //让指针记录变量a的地址 p = &a; cout << "a的地址为: " << &a << endl; // 000000A73899F734 cout << "指针p为: " << p << endl; // 000000A73899F734 //2、使用指针 //可以通过 解引用 的方式来找到 指针 指向的内存 // 指针前加 * 代表解引用,找到指针指向的内存中的数据 cout << "a = " << *p << endl; //a=10 //对指针 指向的内存 重新赋值 *p = 1000; cout << "a = " << a << endl; //1000 cout << "*p = " << *p << endl; //1000 }
用户10731060
2023/08/30
1870
指针数组和数组指针
指针数组 :就是指针的数组,数组的元素是指针;  数组指针:就是指向数组的指针。 简单举例说明:     int *p1[10];    声明了一个数组,数组的元素是int型的指针。     int (*p2)[10]; 声明了一个指针, 指向了一个有十个int元素的数组。 这两种写法主要是因为运算符的优先级, 因为[]的优先级比*高。 第一种写法:p先和[]结合,所以是一个数组,后与*结合,是指针数组。 第二种写法:()的优先级比[]高,*号和p2构成一个指针的定义,指针变量名为p,int 修饰的是数组的
lpxxn
2018/01/31
1.1K0
指针数组和数组指针
C语言中指针数组和数组指针的区别
指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定。它是“储存指针的数组”的简称。 数组指针:首先它是一个指针,它指向一个数组。在32 位系统下永远是占4 个字节,至于它指向的数组占多少字节,不知道。它是“指向数组的指针”的简称。 下面到底哪个是数组指针,哪个是指针数组呢: A) int *p1[10]; B) int (*p2)[10]; 这里需要明白一个符号之间的优先级问题。 “[]”的优先级比“*”要高。p1 先与“[]”结合,构成一个数组的定义,数组名为p1,
用户1215536
2018/02/05
2K0
C语言中指针数组和数组指针的区别
搞清C++中指针、数组、字符串的关系
在一些时候,字符串、指针和数组的关系我们常常搞混,下面通过一些典型问题来展示它们间的关系。
zlmai
2018/09/09
1.7K0
手把手教你深入理解c/c++中的指针
指针是c语言为什么如此流行的一个重要原因,正是有了指针的存在,才使得c/c++能够可以比使用其他语言编写出更为紧凑和有效的程序,可以说,没有掌握指针,就没有权利说自己会用c/c++.然而。然而对于大多数初学者,面对指针这个概念简直是望而生畏,如果前期指针运用的不熟练,后期编写的程序随时都有可能成为一颗定时炸弹,因此今天我就花点时间给大家解释一下我自己对c/c++中指针的理解。
AI算法与图像处理
2021/01/20
5290
手把手教你深入理解c/c++中的指针
详解C语言中的数组指针与指针数组
数组指针的意思即为通过指针引用数组,p先和*结合,说明了p是一个指针变量,指向一个大小为5的数组。所以,int (*p)[5]即为一个数组指针。int *p[5]则是一个大小为5且存放整型指针的数组。
全栈程序员站长
2022/09/19
3.6K0
详解C语言中的数组指针与指针数组
指针+数组指针+字符指针+指针数组
指针作为C语言的核心部分,相比较其他的内容相对比较难懂一下,应用的方式多样,变化较多,导致很多的同学非常苦恼,那么接下来,我将陪你来共同揭开指针的神秘面纱;
啊QQQQQ
2024/11/19
990
指针+数组指针+字符指针+指针数组
C和指针小结(C/C++程序设计)
C和指针 相关基础知识:内存的分配(谭浩强版) 1、整型变量的地址与浮点型/字符型变量的地址区别?(整型变量/浮点型变量的区别是什么) 2、int *p,指向整型数据的指针变量。 3、通过指针变量访问整型变量。 4、*p :指针变量p指向的存储单元(变量) 5、p = &a——>> *p = *&a 6、用指针作函数参数 7、调用函数中,由于虚实结合是采用单向的“值传递”方式,只能从实参向形参传数据,形参值的改变无法回传给实参。 8、引用一个数组元素可以用(1)下标法(2)指针法(占内存小,运行速度快) 9
互联网金融打杂
2018/04/03
6270
C和指针小结(C/C++程序设计)
《挑战30天C++入门极限》C/C++中字符指针数组及指向指针的指针的含义
  函数存放在内存的代码区域内,它们同样有地址,我们如何能获得函数的地址呢?   如果我们有一个int test(int a)的函数,那么,它的地址就是函数的名字,这一点如同数组一样,数组的名字就是数组的起始地址。 定义一个指向函数的指针用如下的形式,以上面的test()为例: int (*fp)(int a);//这里就定义了一个指向函数的指针   函数指针不能绝对不能指向不同类型,或者是带不同形参的函数,在定义函数指针的时候我们很容易犯如下的错误。 int *fp(int a);//这里是错误的,因为按照结合性和优先级来看就是先和()结合,然后变成了一个返回整形指针的函数了,而不是函数指针,这一点尤其需要注意!   下面我们来看一个具体的例子: #include <iostream> #include <string> using namespace std; int test(int a); void main(int argc,char* argv[]) { cout<<test<<endl;//显示函数地址 int (*fp)(int a); fp=test;//将函数test的地址赋给函数学指针fp cout<<fp(5)<<"|"<<(*fp)(10)<<endl; //上面的输出fp(5),这是标准c++的写法,(*fp)(10)这是兼容c语言的标准写法,两种同意,但注意区分,避免写的程序产生移植性问题! cin.get(); } int test(int a) { return a; }   typedef定义可以简化函数指针的定义,在定义一个的时候感觉不出来,但定义多了就知道方便了,上面的代码改写成如下的形式: #include <iostream> #include <string> using namespace std; int test(int a); void main(int argc,char* argv[]) { cout<<test<<endl; typedef int (*fp)(int a);//注意,这里不是生命函数指针,而是定义一个函数指针的类型,这个类型是自己定义的,类型名为fp fp fpi;//这里利用自己定义的类型名fp定义了一个fpi的函数指针! fpi=test; cout<<fpi(5)<<"|"<<(*fpi)(10)<<endl; cin.get(); } int test(int a) { return a; }
landv
2019/07/15
1.3K0
c++之指针
在32位操作系统下,无论指针数据类型是什么数据类型,都是占4个字节,而在64位操作系统中占8个字节。
西西嘛呦
2020/08/26
5460
指针数组与数组指针详解
(当一个变量出现左右都出现一个运算符时,没有记住运算符优先级的人就会纠结arr变量到底跟哪一个运算符先结合。如果是自己定义一个指针数组,搞不清楚运算符的优先级,那么就加上小括号(),比如定义一个指针数组,可以写成char *(arr[4]),不过在定义之前一定要清楚自己定义的变量,如果目的是一个数组,那就把arr[4]括起来,如果是一个指针,就把*arr括起来。如果是看到一段这样的代码,可以从他的初始化来分别它是数组还是指针,很明显,我这定义的是一个数组,如果是指针,会用NULL来初始化。)
Twcat_tree
2022/11/30
5090
c++面试题中经常被面试官面试的小问题总结(二)(本篇偏向指针知识)
原文链接:https://www.cnblogs.com/DOMLX/p/10713204.html
徐飞机
2019/05/07
5150
萌新学习C++容易漏掉的知识点,看看你中招了没有(一)
       很多人,包括我,看书,看完一章怎么怎么的,然后不管是作业,还是考试出现这一章的内容,总有些地方跟我们脑袋里面理解的不一样,自己明明学习过,但机器给出的答案和自己的完全相反,或者完全不正确,这就是为什么书读百遍,其义自见,可能夸张了,不知道你们是怎样的,一本书多读,确实能带给我不同的知识,这也是我为什么想起来写总结,我加了一个群,看到萌新们问的问题大多是他们看书漏掉的知识,这些人一定是只看了一遍或者没看,他们的程序刚好需要那么一点小小的知识去解决,可是他们不知道这一点小小的知识。        为什么会漏掉知识,我个人认为是这样的,最起码我是,比如这一章讲for,一看语法,我去,就怎么简单?上机一敲,啪啦啪啦啪啦,循环正确,嗯,for循环我学会了,然后沉浸在自我喜悦中顺利进入了下一章,应该就是这样吧? 哈哈,然后后期写复杂程序的时候就出了问题,于是再次翻开了那久违的for循环。(手动狗头)好了,好了,下面的总结可能不是一块知识点的,而是我目前以来感觉会漏掉的知识点,有可能是提高程序效率的,为了查找方便,我都列了标题,或许我的整篇文章只有一处帮到了你,那么也是有意义的,下面我们进入正题。
花狗Fdog
2020/10/28
5400
C/C++数组与指针详解
数组大小(元素个数)一般在编译时决定,也有少部分编译器可以运行时动态决定数组大小,比如icpc(Intel C++编译器)。
恋喵大鲤鱼
2018/08/03
7810
new和delete
在C++语言中,我们可以通过malloc分配堆上的内存,但是C++时使用new来分配内存
用户7272142
2023/10/11
2030
c++那些事儿9.0指针
知识点综述: ---- 指针:地址。 1.0在32位的cpu上,cpu一般由32根地址线组成,所以地址大小为32位 即4byte,同理可得指针大小为4byte; 2.0指针是有类型的,和它指向的数据类型相同; double p1=11,*p2; p2=&p1;//p2为double型指针 3.0数组名是一个const指针。 int arr[6]; arr是常量指针。 二维数组名是指向行的指针,它指向一整行元素而非个
热心的社会主义接班人
2018/04/27
7120
c++那些事儿9.0指针
【C++笔试强训】第三天
a是数组名,所以指向数组首元素;p=a+8:a向右偏移8个字节,指向‘9’。p - 3也就是向左偏移3个字节,对于%s打印:遇到\0停止打印,打印出6789
平凡的人1
2023/10/15
1800
【C++笔试强训】第三天
一个结构体指针数组内存分配问题引发的思考
为了在程序运行过程中,将两个结构体数组合并成一个大的结构体,在节省空间的基础上,我使用一个大的结构体指针数组,来将其元素分别指向结构体数组中的结构体。
C语言中文社区
2022/05/31
1.1K0
一个结构体指针数组内存分配问题引发的思考
相关推荐
C语言指针详解(文末有福利)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档