什么是指针?什么是数组?指针和数组的关系?


形象地讲,我们可以把计算机的内存看作一条长街上的一排房屋,每个房间都可以容纳数据并通过一个房号来表识。而表示每个房间房号的值我们可以称为地址。或许这样的比喻有局限性,毕竟真实地计算机内存是以数以万计的bit位组成。

⑴初始化:

①最简单的以 int *p 为例,初始化时内存里开辟了四个字节的空间。

▇▇▇▇

②另一个声明 ,现在,我们有两个变量,下图中显示了后面那个未知内容的内存。

char ch = 'a';

char cp = &a;

▇→▇▓←(?)

↗     ↖

(cp)      (ch)

⑵“*”的用法

① 定义指针变量是

② 对指针变量进行节引用是

★注意1:若要实现地址的移动,是p++,而不是*p++

★注意2:

int *p = NULL;   //代表创建一个指针变量,并对它进行初始化。

*p = NULL;      //将访问到的内容改为NULL。

★注意3:对于数组int a[4],&a与a的区别是什么呢?&a与a的内容一样,但&a+1增加了16个字节,而a+1增加了一个字节。原因是&a是整个数组的地址,而a是数组首元素的地址。

如下表格可以让我们深刻地理解指针与数组的区别

a[]={1,2,3,4} char name[]="abcdef" char *name="abcdef"
sizeof(a)=16 sizeof(name[0])=1 sizeof(&name)=4
sizeof(&a)=16 sizeof(&name)=4 sizeof(*name)=1
sizeof(a+0)=4 sizeof(*name)=1 sizeof(&name+1)=4
=4sizeof(*a)=4 sizeof(&name+1)=4 sizeof(name)=4
sizeof(a+1)=4 sizeof(name+1)=4 sizeof(name+1)=4
sizeof(&a)=4 sizeof(name)=7 strlen(name)=6
sizeof(&a[0])=4 strlen(&name)=6 strlen(&name)=6
sizeof(&a[0]+1)=4 strlen(&name+1)=12 strlen(&name+1)=随机值

指针数组与数组指针的区别

指针数组:用于存储指针的数组,即数组元素都是指针。

数组指针:指向数组的指针。

表达式 类型 表示 元素表示
int a[4] 整型数组 含有4个元素的整型数组 a[i]
int *a[4] 数组指针 a中元素为int型指针 *a[i]或*(a[i])
int (*a)[4] 数组指针 指向数组a的指针 (*a)[i]

▲int *:  一次访问四个字节.

▲char *: 一次访问一个字节.

转载于:https://blog.51cto.com/10798301/1720066

什么是指针?什么是数组?指针和数组的关系?相关推荐

  1. C++ 笔记(27)— 指针变量、数组和指针、指针数组、数组指针、指针常量与常量指针

    1. 什么是指针变量? 指针变量是专门有一个变量来存放指针. int main(int argc, char *argv[]) {int a = 10;int *p = &a; //通过取地址 ...

  2. 关于C语言中的数组指针、指针数组以及二级指针

    概念解释 数组指针:首先它是一个指针,它指向一个数组,即指向数组的指针:在32 位系统下永远是占4 个字节,至于它指向的数组占多少字节,不知道.数组指针指向的是数组中的一个具体元素,而不是整个数组,所 ...

  3. 【C语言】数组指针与指针数组的区分与应用

    这里以一道C语言题--输出矩阵两个对角线上的数(二维数组)为例 7-57 输出矩阵两个对角线上的数(二维数组) (6 分) 编写程序,将数据输入一个n * n二维数组中,输出矩阵两个对角线上的数.假设 ...

  4. C++ 笔记(14)— 指针(指针声明、取地址、取值、new/delete、NULL指针、指针运算、指针数组、数组指针、指针传递给函数、从函数返回指针)

    1. 声明指针 指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址.就像其他变量或常量一样,您必须在使用指 针存储其他变量地址之前,对其进行声明. 指针变量声明的一般形式为: type * ...

  5. C++二维数组名与数组指针的思考

    二维数组名和数组指针可以当做一个东西用,但两者之间的含义是不同的. 二维数组名是一个指向数组中所有元素的指针,而数组指针是一个行指针.体现在sizeof()上的不同. #include <ios ...

  6. C指针9:指针数组(即数组中的每个元素都是指针)

    前边已经讲过数组指针,强调的是指针,意思就是该指针指向的是数组(数组里边的元素一般为普通数据). 指针数组,强调的是数组,意思就是该数组里边的每个元素都是指针类型.即如果一个数组中的所有元素保存的都是 ...

  7. C指针4:数组指针(指向数组的指针)

    先明确两个概念:(1和2是两个完全不一样的东西) 1.数组指针:如果一个指针指向了数组(该数组就是普通定义的数组),我们就称它为数组指针(Array Pointer).(1强调的是指针) 2.指针数组 ...

  8. C语言指针数组与数组指针的区别

    C语言指针数组与数组指针的区别 首先,顾名思义 数组指针是一个指针,是指向一个数组的指针,如 int (a*)[5]:这就是一个指向含有5个元素的数组的指针 指针数组是一个数组,它包含的元素全是指针变 ...

  9. Delphi 的内存操作函数(2): 给数组指针分配内存

    静态数组, 在声明时就分配好内存了, 譬如: vararr1: array[0..255] of Char;arr2: array[0..255] of Integer; beginShowMessa ...

  10. C 语言回顾,数组指针的使用(小鸡肋的使用)

    在我们日常的代码维护中,对数组指针的使用几乎没有,所以,久而久之就不太记得,怎么玩比较好 但是在一些 已知的linux自带的命令行源代码中有使用的,为了保持同步,所以探究几个可能用法 但是完全可以用多 ...

最新文章

  1. 如何让报表告别繁琐?简单操作实现报表联动!
  2. mysql模糊查询 or_mysql的模糊查询
  3. php会不会被人工智能取代,为什么这9种工作不会被人工智能取代?
  4. 加拿大生信开源学习资源Bioinformatics.ca
  5. 智能会议系统(30)---WebRTC学习之一:开篇
  6. 浅析 Bash 中的 {花括号} | Linux 中国
  7. Qt5.4生成安装包过程
  8. android 自定义 build.gradle,Gradle for Android 第二篇( Build.gradle入门 )
  9. springboot日志写入mysql_springboot运用logback将日志写入数据库
  10. 简单的扫雷游戏代码(c++)
  11. Linux本地网络软件仓库搭建
  12. 解决布局点击事件穿透的问题
  13. 大数据系列 | 阿里云datav数据可视化(使用json文件生成可视化动态图标)
  14. 《matlab图像处理入门》总结
  15. 程序员转正述职报告_程序员个人述职报告范文4篇(整理版)
  16. 人事考试网上报名管理系统-更稳定安全易用的招考系统,满足各类各行业有招聘考试需求的项目
  17. 使用 Vue3 + elementPlus 做一个每日习惯打卡表
  18. 计算机考研初试350分什么水平,考研分数,考研350分什么水平!
  19. Asp代码转换java代码器_asp下实现对HTML代码进行转换的函数
  20. 企业微信客户端开启开发者模式

热门文章

  1. IOS-input元素光标偏移乱跑,是什么原因
  2. POJ-1094 Sorting it All Out
  3. 解决WebStrom、PhpStorm等JetBrains软件最新版的中文打字法问题
  4. Chapter 1:Introduction
  5. iOS多设备分辨率适配
  6. Java6.0中Comparable接口与Comparator接口详解
  7. balanced binary search tree
  8. SQL Sever 子查询与嵌套查询
  9. 使用Docker部署Node.js中的Vue项目
  10. java猜数游戏有次数限制_超有趣的数学小游戏,陪孩子孩子边玩儿边学