什么是指针?什么是数组?指针和数组的关系?
什么是指针?什么是数组?指针和数组的关系?
形象地讲,我们可以把计算机的内存看作一条长街上的一排房屋,每个房间都可以容纳数据并通过一个房号来表识。而表示每个房间房号的值我们可以称为地址。或许这样的比喻有局限性,毕竟真实地计算机内存是以数以万计的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
什么是指针?什么是数组?指针和数组的关系?相关推荐
- C++ 笔记(27)— 指针变量、数组和指针、指针数组、数组指针、指针常量与常量指针
1. 什么是指针变量? 指针变量是专门有一个变量来存放指针. int main(int argc, char *argv[]) {int a = 10;int *p = &a; //通过取地址 ...
- 关于C语言中的数组指针、指针数组以及二级指针
概念解释 数组指针:首先它是一个指针,它指向一个数组,即指向数组的指针:在32 位系统下永远是占4 个字节,至于它指向的数组占多少字节,不知道.数组指针指向的是数组中的一个具体元素,而不是整个数组,所 ...
- 【C语言】数组指针与指针数组的区分与应用
这里以一道C语言题--输出矩阵两个对角线上的数(二维数组)为例 7-57 输出矩阵两个对角线上的数(二维数组) (6 分) 编写程序,将数据输入一个n * n二维数组中,输出矩阵两个对角线上的数.假设 ...
- C++ 笔记(14)— 指针(指针声明、取地址、取值、new/delete、NULL指针、指针运算、指针数组、数组指针、指针传递给函数、从函数返回指针)
1. 声明指针 指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址.就像其他变量或常量一样,您必须在使用指 针存储其他变量地址之前,对其进行声明. 指针变量声明的一般形式为: type * ...
- C++二维数组名与数组指针的思考
二维数组名和数组指针可以当做一个东西用,但两者之间的含义是不同的. 二维数组名是一个指向数组中所有元素的指针,而数组指针是一个行指针.体现在sizeof()上的不同. #include <ios ...
- C指针9:指针数组(即数组中的每个元素都是指针)
前边已经讲过数组指针,强调的是指针,意思就是该指针指向的是数组(数组里边的元素一般为普通数据). 指针数组,强调的是数组,意思就是该数组里边的每个元素都是指针类型.即如果一个数组中的所有元素保存的都是 ...
- C指针4:数组指针(指向数组的指针)
先明确两个概念:(1和2是两个完全不一样的东西) 1.数组指针:如果一个指针指向了数组(该数组就是普通定义的数组),我们就称它为数组指针(Array Pointer).(1强调的是指针) 2.指针数组 ...
- C语言指针数组与数组指针的区别
C语言指针数组与数组指针的区别 首先,顾名思义 数组指针是一个指针,是指向一个数组的指针,如 int (a*)[5]:这就是一个指向含有5个元素的数组的指针 指针数组是一个数组,它包含的元素全是指针变 ...
- Delphi 的内存操作函数(2): 给数组指针分配内存
静态数组, 在声明时就分配好内存了, 譬如: vararr1: array[0..255] of Char;arr2: array[0..255] of Integer; beginShowMessa ...
- C 语言回顾,数组指针的使用(小鸡肋的使用)
在我们日常的代码维护中,对数组指针的使用几乎没有,所以,久而久之就不太记得,怎么玩比较好 但是在一些 已知的linux自带的命令行源代码中有使用的,为了保持同步,所以探究几个可能用法 但是完全可以用多 ...
最新文章
- 如何让报表告别繁琐?简单操作实现报表联动!
- mysql模糊查询 or_mysql的模糊查询
- php会不会被人工智能取代,为什么这9种工作不会被人工智能取代?
- 加拿大生信开源学习资源Bioinformatics.ca
- 智能会议系统(30)---WebRTC学习之一:开篇
- 浅析 Bash 中的 {花括号} | Linux 中国
- Qt5.4生成安装包过程
- android 自定义 build.gradle,Gradle for Android 第二篇( Build.gradle入门 )
- springboot日志写入mysql_springboot运用logback将日志写入数据库
- 简单的扫雷游戏代码(c++)
- Linux本地网络软件仓库搭建
- 解决布局点击事件穿透的问题
- 大数据系列 | 阿里云datav数据可视化(使用json文件生成可视化动态图标)
- 《matlab图像处理入门》总结
- 程序员转正述职报告_程序员个人述职报告范文4篇(整理版)
- 人事考试网上报名管理系统-更稳定安全易用的招考系统,满足各类各行业有招聘考试需求的项目
- 使用 Vue3 + elementPlus 做一个每日习惯打卡表
- 计算机考研初试350分什么水平,考研分数,考研350分什么水平!
- Asp代码转换java代码器_asp下实现对HTML代码进行转换的函数
- 企业微信客户端开启开发者模式