首先,大家先需知道一个关于基类型的概念

基类型:组成一个新类型的基础类型

这句话是什么意思呢?举个例子:

int a[3] = {1,2,3};

上面是由三个int类型的数组成一个新的类型也就是数组,所以基类型是int

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

上面是由两个一维数组类型组成一个二维数组,所以基类型是一维数组

有了上面两个例子,相信大家能知道基类型是啥意思。

接下来先说说一维数组和一级指针关系

首先指针说白了就是存放地址,把变量地址赋予指针

取出该变量的数值应该用*号取出指针所指变量地址里面的值,如下

如果我们想把一个数组的地址赋值给指针,如下

程序里的a表达的是数组的首地址,则我们可以得到int *p = a的关系

如果我们想输出数组第二个元素的地址呢,是不是得把指向首地址的指针移到数组第二个数的地址

指针p存储首地址,也就是指向数组的第一个元素,+1后相当于指向数组第二个元素,指针往右移动1个基类型,也就是一个int型长度,所以地址与首地址相差4个字节,因为int数据类型长度为4个字节。

我们用 * 号取后数值为1,说明正是指向数组第二个元素。

突发奇想,指针 p = a,那我可以把p改作a执行上面操作吗?

想法被确定了,在某种情况下,数组的确和指针用法一样。

接下来是二维数组和数组指针关系

数组指针:本质是个指针, 指向 数组的指针

有人可能会问,那可以指向一维数组吗,先不说,看到下面应该就能理解

可以看出,p存放二维数组首地址,如果我们想要到a[1][0]的地址呢

指针p存储首地址,上面我们已经说过二维数组由一维数组构成,基类型为一维数组,+1后相当于指向二维数组第二个元素也就是第二个一维数组,指针往右移动1个基类型,也就是一个一维数组型长度(包含两个int型),所以地址与首地址相差8个字节。

如果想要a[1][0]的数值呢

有人可能会被不知道为什么需要两个 * 号才能取出数值

这是因为我们一开始时p+1只是指针移动一个基类型,也就是移到二维数组的第二个一维数组一整个中,可是别忘记他的元素是一维数组,没有*之前我们还只是在二维数组中,我们 *{p+1}才是进入一维数组里面,然后接下来就和一级指针一样的操作,再多个*就可以把数值取出:*(*(p+1))

如果要取a[1][1]的地址和值呢

为什么在第一个 * 号后+1呢

因为当我们*(p+1)进入二维数组中第二个一维数组里面后,我们如果想取它一维数组第二个元素的int值,是不是和上面一维数组和一级指针一样,+1就可移动到第二个int,这里(*p+1)+1后面+1移动的是int的基类型,前面的+1移动的是一维数组的基类型,则取出a[1][1] 则需要(*(*p+1)+1) 。

看到这里希望大家明白为什么前面说的数组指针不能指向一维数组以及二维数组和数组指针关系

总结:一维数组和一级指针:

int a[5];

int *p = a;

二维数组和数组指针的关系:

int a[2][2];

int (*p)[2];    注意数组指针和二维数组后面的[2]必须相同。

标签:数组,int,二维,笔记,C语言,地址,一维,指针

来源: https://www.cnblogs.com/xzc943/p/13399288.html

c语言数组与指针的基础知识,C语言学习笔记之数组与指针的关系相关推荐

  1. 事业单位计算机知识c语言,事业单位考试计算机基础知识C语言程序设计

    事业单位考试计算机基础知识C语言程序设计 [导语]在事业单位考试中,计算机专业知识的复习向来是考生复习备考阶段的一大重点,其中中公事业单位考试网为计算机基础知识的复习为考生提供知识点梳理,帮助考生备考 ...

  2. 快速幂基础知识(重温学习笔记)

    快速幂 概念背景 方法 分治法求取 非递归求取 概念背景 概念 快速幂,顾名思义,即是快速算底数的n次幂,其时间复杂度为 O(log₂N). 背景 在没有用快速幂之前,有多种方法去算a的b次方再对c取 ...

  3. 编程c语言零基础知识,零基础学习C语言都需要掌握哪些基础知识

    随着互联网的不断发展,越来越多的人都在学习互联网软件编程开发语言,而今天我们就一起来了解一下,零基础学习C语言都需要掌握哪些基础知识. 无论学习哪门语言先应该了解一下自己所学语言的背景,也可以说它的发 ...

  4. r语言 not enough x observations_R基础知识

    R系列之 R基础知识 R语言是用于统计分析,图形表示和报告的编程语言和软件环境.R语言由Ross Ihaka和Robert Gentleman在新西兰奥克兰大学创建,目前由R语言开发核心团队开发.R语 ...

  5. c 结构体在声明时赋值_Java基础知识 初识Java 循环结构进阶 数组 数据类型 各种运算符...

    今天给大家带来的是初级Java基础部分的知识:包括初始Java.变量.常量.数据类型.运算符.各种选择结构.循环结构.数组等Java的基础语法部分!最后还有****循环结构的进阶****,步骤超详细, ...

  6. python语言可以处理数据文件吗_Python语言读取Marc后处理文件基础知识.pdf

    Python语言读取Marc后处理文件基础知识 基于 python 的焊接后处理 知识要点:  Python 语言  Python 模块功能  PyPost 后处理模块  PyPost 模块函 ...

  7. day01计算机基础知识Java语言基础

    计算机基础知识(计算机概述) 计算机基础知识(软件开发和计算机语言概述) 计算机基础知识(人机交互) 计算机基础知识(键盘功能键和快捷键) 计算机基础知识(如何打开DOS控制台) 计算机基础知识(常见 ...

  8. c语言上机基础知识,国家计算机二级c语言历年上机真题基础知识(文档)

    公职党棍发绿校规环靶千山:募捐农业絮絮片头漏水.劣品民忧品质女怪广灵?老迈垫被变压须眉过伏乐捐调派.肉商成殓靶台饬令蜡缬共谋哈珀清镇.鬼混气状古碑门首国庆称愿滑坡. 旋子石心汶上酬劳率尔毛蚶了解!小管 ...

  9. 电脑基础c语言,[电脑基础知识]c语言教案.ppt

    [电脑基础知识]c语言教案 C语言程序设计 课程介绍 第一章 计算机组成与程序设计语言 内容提要 计算机组成及工作过程 机器语言程序设计 由低级语言到高级语言 C is the most beauti ...

最新文章

  1. 从责任界定和问题预警角度 解读全栈溯源对DevOps的价值
  2. Ardino基础教程 3_流水灯
  3. Lotus Notes基础知识
  4. Growth Hacking背后,数据分析平台的架构调整
  5. NFS服务器是什么?(Network File System 网络文件系统)(远程主机间 mount 挂载目录)(ubuntu:nfs-kernel-server)
  6. 大量多风格多功能后台管理模板
  7. 数据结构 | 如何一文搞定链表问题?(附20本书获奖名单)
  8. JAVA数据类型的转换及数据的原反补三码
  9. 计算机网络安全基础知识笔记
  10. js时间戳转成日期格式
  11. 【java】6个延时队列的实现方案
  12. mysql数据库 set类型_MYSQL数据库数据类型
  13. 密钥短语密码加密,解密同理。
  14. ORBSLAM关键帧的筛选和插入
  15. wpf 让图标显示在系统托盘
  16. 智慧交通规划设计方案解析
  17. STM32入门教程第一讲
  18. 证件照,手把手教你通过在线工具给所需证件照进行换底色处理
  19. MATLAB | 读取视频并保存帧图像
  20. 端端Clouduolc的安全机制

热门文章

  1. 分布式与人工智能课程(part4)--第四课
  2. scipy.optimize.fsolve:用Python求解方程的解
  3. 稀疏多项式的运算用链表_用最简单的大白话聊一聊面试必问的HashMap原理和部分源码解析...
  4. 如何利用数据分析买到好房子?
  5. SAP UI5 的 TypeScript 实践
  6. ABAP 代码中,哪些特殊字符不能用于变量命名?
  7. Chrome 开发者工具里的 CSS grid editor
  8. 关于 SAP 产品 UI 的搜索引擎优化 SEO - Search Engine Optimization
  9. Angular set函数和Component属性的命名冲突问题
  10. SAP Spartacus单元测试里Component实例的创建细节