IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言中的数组指针及例题解释 -> 正文阅读

[C++知识库]C语言中的数组指针及例题解释

目录

一.前言

二.数组指针

数组指针的定义

?例题

解释

三.&数组名和数组名之间的区别与联系

看代码

我们再看一段代码︰

总结

四.数组指针的使用

看代码

?一个数组指针的使用

解释一下[j]

五. 例题

解释


一.前言

关于C语言的指针详解我在之前文章中有提到过,这一篇文章数组指针是接着那一篇的内容继续,如果想看看之前的内容,可以点击下面的链接

?C语言指针详解(点击此即可)

二.数组指针

数组指针的定义

数组指针是指针?还是数组?答案是:指针。

我们已经熟悉︰整形指针: int * pint;能够指向整形数据的指针。浮点型指针:float * pf;能够指向浮点型数据的指针。那数组指针应该是∶能够指向数组的指针。

如下图解释

?

?

?例题

int *p1[10];
int (*p2)[10];
//p1,p2分别是什么?

解释

int (*p)[10];p先和*结合,说明p是一个指针变量,然后指着指向的是一个大小为10个整型的数组。所以p是一个指针,指向一个数组,叫数组指针。这里要注意:[]的优先级要高于*号的,所以必须加上( )来保证p先和*结合。

三.&数组名和数组名之间的区别与联系

对于下面的数组∶
int arr[10];
arr和&arr分别是啥?
我们知道arr是数组名,数组名表示数组首元素的地址。那&arr数组名到底是啥?

看代码

#include<stdio.h>
int main()
{
    int arr[10]={0};
    printf("%p\n",&arr);
    printf("%p\n",arr);

    return 0;
}

运行结果是

?可见数组名和&数组名打印的地址是一样的。但是难道两个是完全一样的吗?

我们再看一段代码︰

#include<stdio.h>
int main()
{
    int arr[10]={0};
    printf("arr=%p\n",arr);
    printf("&arr=%p\n",&arr);
    printf("arr+1=%p\n",arr+1);
    printf("&arr+1=%p\n",&arr+1);
    return 0;
}

?运行结果是:

总结

根据上面的代码我们发现,其实&arr和arr,虽然值是一样的,但是意义应该不一样的。实际上: &arr表示的是数组的地址,而不是数组首元素的地址。(细细体会一下)数组的地址+1,跳过整个数组的大小,所以&arr+1相对于&arr的差值是40。

四.数组指针的使用

那数组指针是怎么使用的呢?
既然数组指针指向的是数组,那数组指针中存放的应该是数组的地址。

看代码

#include<stdio.h>
int main()
{
    int arr[10]={1,2,3,4,5,6,7,8,9,0};
    int (*p)[10]=&arr//把数组arr的地址赋值给数组指针变量p
    return 0;
}

但是我们一般很少这样写代码
如果这样写,那么我们输出数组就需要这样用

?或者

?一个数组指针的使用

?

?上面中的print_arr1是最容易理解的一种(它的参数是数组),但是我们理解这一句:但是二维数组的首元素是二维数组的第一行之后我们就可以利用数组指针来输出

?

?上面的循环中的两个printf都可以正确输出
p是指向第一行,+i就是跳过i行,然后*(p+i)解引用就是说拿到这一行,然后要拿到这一行中的某一元素,就可以用上述两种方法

解释一下[j]

上图中的四个printf都是等效的,p就是arr的首地址,p[]就是取地址里的内容,所以p[]=arr[]

?所以还可以写成

五. 例题

学了指针数组和数组指针我们来一起回顾并看看下面代码的意思︰

int arr[5]
int *parr1[10]
int (*parr2)[10]
int (*parr3[10])[5]

解释

?画图解释最后一个:

?

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-10-08 20:22:11  更:2022-10-08 20:22:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 6:21:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码