当前位置:网站首页>关于指针数组与数组指针的一些事
关于指针数组与数组指针的一些事
2022-07-20 16:07:00 【孤独时代的c0re】
指针是一个特殊的变量,他储存的是一个地址,是一个内存空间。
一.指针数组
二.数组指针
好,我们今天重点总结一下这几两个很很很容易混乱的概念!!!
指针数组与数组指针
首先,让我们了解一些运算符的优先级:
(网上找的图)
()与[ ] 优先级相同,根据结合律,就从左向右运算
1.指针数组
指针数组的重点是数组,你看,如果你加一个的就变成了指针的数组也就是一个装着一个个指针的数组。
指针数组的定义:int *p[n]; 先定义的[]也就是说指针数组先是一个数组再是一个指针
#include <stdio>
int main()
{
int a = 1;
int b = 2;
int *p[2];
p[0] = &a;
p[1] = &b;
printf("%p\n", p[0]); //a的地址
printf("%p\n", &a); //a的地址
printf("%p\n", p[1]); //b的地址
printf("%p\n", &b); //b的地址
printf("%d\n", *p[0]); //p[0]表示a的地址,则*p[0]表示a的值
printf("%d\n", *p[1]); //p[1]表示b的地址,则*p[1]表示b的值
int *pp[3]; //一个一维数组内存放着三个指针变量,分别是p[0]、p[1]、p[2],所以要分别赋值
int c[3][4];
for (int i = 0; i<3; i++)
pp[i] = c[i];
int k;
scanf("%d", &k);
return 0;
}
由此可以看出来指针数组就是一个个指针的数组
他对于存放二维数组
提到二维数组就不得不提字符串
如char*p [3] 的效果就和char [] [3]的效果基本一样了。
所以利用指针数组可以更方便的定义和访问多行字符串。
指针数组的本质还是很好理解的,就是一个存放指针的数组。
好了,我们继续来看他的亲戚——数组指针。
2.数组指针:
数组指针的定义:int(* p)[n];因为()与[ ] 优先级相同,根据结合律,就从左向右运算所以数组指针先是指针
So , 数组指针的概念也很好理解指针数组的本质是数组那么数组指针的本质就是指针!如果说定义一个指针p让他指向一个数组的话那么数组指针就是以己之力指向全部数组的指针。
什么意思呢,比如
int a[6] = {1, 2, 3, 4, 5, 6};
int *p2 = a;
int (*p1)[6] = &a;
这样应该可以比较直观的看出来是什么意思了吧!
a是一个数组名也就是数组的首地址
而&a是整个这个数组的首地址而不是数组首个元素的首地址!首地址和整个数组的概念是不同的!了解了这一点应该就可以清楚了解数组指针是什么了(反正当时我就是知道这一点以后顿悟。)
给你们搞个代码瞅瞅:
#include <stdio.h>
int main()
{
int temp[5] = {1, 2, 3, 4, 5};
int (*p)[5] = &temp;//或者写成int (*p)[5] ;p=&temp
int i;
for(i = 0; i < 5; i++)
{
printf("%d\n", *(*p + i));
}
return 0;
}
当时我看到这段代码(在小甲鱼视频里看到的)我就有了两个问题:
1.int (*p)[5] = &temp;这个为什么这样附值?
2.printf("%d\n", *(*p + i));为什么有两个*?
||插入一些关于数组的首地址和数组首个元素的地址的理解||
int main()
{
int arr[10] = {0};
printf("数组元素首地址 :%d\n",arr); //数组元素首地址 2293280
printf("数组首地址 :%d\n",&arr); //数组首地址 2293280
printf("数组元素首地址+1 :%d\n",arr+1); //数组元素首地址 2293284
printf("数组首地址+1 :%d\n",&arr+1); //数组首地址 2293320
return 0;
}
p存放的是&temp。
而*p不就是整个数组的地址的值而整个数组的地址的值与数组首个元素的地址的值相同*p+i的值是不是就是第i个元素的地址。而*(*p+i)不就是数组中第i个元素的值?
所以数组指针的问题就迎刃而解了!!!
反正我是这么理解的,如有错误请大佬指出!
Love is worth years.
热爱可抵岁月漫长。
边栏推荐
- [bug resolution] visibledeprecationwarning: creating an ndarray from ragged needed sequences
- Using ODBC to consume SAP ABAP CDs view in Excel
- laneatt代码复现和用自己采集的视频来测试
- [Extension announcement] 2022 International Conference on touch and virtual reality (ichvr 2022)
- 3.压力测试
- 视频聊天源码——一对一直播系统源码
- Postman进阶功能
- 尚硅谷SSM新版视频教程发布
- In July, the "China database industry analysis report" was released! Be prepared for danger in times of safety, safety first
- 在Win Server 2012 R2 下安装 卡巴斯基2018
猜你喜欢
机器学习—支持向量机理论详细推导(含例题讲解)(二)
JS----- 第四章 数组
一、MFC介绍
[bug resolution] visibledeprecationwarning: creating an ndarray from ragged needed sequences
Heavy forecast! Analysys, together with Microsoft and the Central University of Finance and economics, talks about the digital economy
In July, the "China database industry analysis report" was released! Be prepared for danger in times of safety, safety first
Machine learning - detailed derivation of support vector machine theory (including explanation of examples) (II)
CSDN meetup review - from data lake to index middle stage, improve data analysis ROI
influxdb查询时间戳问题
Iccv2021 frequency domain image translation: more photo realistic, better identity preserving
随机推荐
[Extension announcement] 2022 International Conference on touch and virtual reality (ichvr 2022)
在VB6 处理pdf 和jpg文件
C语言程序环境和预处理
.net Redis客户端NewLife.Redis.Core库的使用
生成随机整数的两种方法
使用系统自带SQLite
在Win Server 2012 R2 下安装 卡巴斯基2018
Xilinx MIPI CSI-2 Receiver Subsystem IP详解
AI 助力双碳目标:让每一度电都是我们优化的
codeforces educational round 131 ABCDEF
wine 微信初始化96%卡住
hyperledger fabric1.0整体架构与记账逻辑架构的分析
一文了解工业互联网标识解析二级节点
Machine learning - detailed derivation of support vector machine theory (including explanation of examples) (I)
MySQL版本号6和7去哪了?
用户体验 | 深耕用户体验筑造银行竞争的护城河
js 平滑滚动到顶部
NVIDIA Inspector 详细使用说明书
机器学习—支持向量机理论详细推导(含例题讲解)(一)
什么是Pygame