数组、指针、数组指针、指针数组
来源:互联网 发布:淘宝影响实体店 编辑:程序博客网 时间:2024/06/12 01:00
一、类型 T 的指针和类型 T 的数组并非同种类型。
常常听说 char c[] 和 char *c 是一样的。然而实际上并非如此。数组定义 char c[10] 请求预留 10 个字符的位置, 并用名称 “c” 表示。也就是说, 有一个称为 “c” 的位置, 可以放入 10 个字符。而指针申明 char *p, 请求一个位置放置一个指针, 用名称 “p” 表示。这个指针几乎可以指向任何位置: 任何字符和任何连续的字符, 或者哪里也不指。
#include<iostream>using namespace std;int main(){char c[10]="licongqi";char *p = "licongqi";char a;a = c[0];a = c[3];a = p[3];cout<<c<<endl<<*p<<endl;return 0;}
根据 X 是数组还是指针, 类似 X[3] 这样的引用会生成不同的代码。以上面的声明为例, 当编译器看到表达式 c[3] 的时候, 它生成代码从 c 的位置开始跳过 3 个, 然后取出那个字符. 如果它看到 p[3], 它生成代码找到“p” 的位置, 取出其中的指针值, 在指针上加 3 然后取出指向的字符。换言之, c[3]是名为 c 的对象 (的起始位置) 之后 3 个位置的值, 而p[3] 是 p 指向的对象的 3 个位置之后的值. 在上例中, c[3] 和 p[3] , 编译器到达那里的途径不尽相同。本质的区别在于类似 c 的数组和类似 p 的指针一旦在表达式中出现就会按照不同的方法计算, 不论它们是否有下标。
8: a = c[0];004011AE mov cl,byte ptr [ebp-0Ch]004011B1 mov byte ptr [ebp-14h],cl9: a = c[3];004011B4 mov dl,byte ptr [ebp-9]004011B7 mov byte ptr [ebp-14h],dl10: a = p[3];004011BA mov eax,dword ptr [ebp-10h]004011BD mov cl,byte ptr [eax+3]004011C0 mov byte ptr [ebp-14h],cl
数组和指针的区别是什么?
数组自动分配空间, 但是不能重分配或改变大小。指针必须明确赋值以指向分配的空间 (可能使用 malloc), 但是可以随意重新赋值 (指向不同的对象), 同时除了表示一个内存块的基址之外, 还有许多其它的用途。由于数组和指针所谓的等价性, 数组和指针经常看起来可以互换, 而事实上指向 malloc 分配的内存块的指针通常被看作一个真正的数组(也可以用[]引用)。但是, 要小心 sizeof。
二、指针数组和数组指针大不相同
指针数组,按字面意思理解,就是一个数组,其中的元素是指针。
例如 int *arr[10];声明了一个数组,数组大小为10,数组中元素的类型为int *,若要操作数组中的元素,需要取下标。
而数组指针,则是一个指针,它指向的是一个数组。
例如int (*p)[10];声明了一个指针,该指针指向一个大小为10,元素类型为int的指针。 在使用下标或增量时, 会跳过整个数组, 通常只在操作数组的数组时有用。
#include<iostream>using namespace std;int main(){int *arr[10];cout<<"size of arr:"<<sizeof(arr)<<endl;int (*p)[10];cout<<"size of p:"<<sizeof(p)<<endl;return 0;}
从程序的运行结果可以证明上述说明。我们只需要按照数组和指针的用法进行操作就好,使用之前记得初始化。
- 指针数组、数组指针
- 指针数组/数组指针
- 指针数组/数组指针
- 数组指针 指针数组
- 指针数组,数组指针
- 数组,指针,数组指针
- 数组,指针,数组指针
- 指针数组&数组指针
- 指针数组&数组指针
- 数组指针 指针数组
- 指针数组/数组指针
- 数组指针&指针数组
- 数组指针 指针数组
- 数组指针 指针数组
- 指针数组 数组指针
- 指针数组,数组指针
- 指针数组 数组指针
- 指针数组&数组指针
- 你的应用如何成为分享应用程序(share content) 或者 可以增加账户(add an account app list)的应用程序
- 桶排序算法
- vsftpd 打开日志输出功能
- IOS开发学习基础--------C语言(一)
- oracle字段类型与java对象类型对照表
- 数组、指针、数组指针、指针数组
- _cdecl与_stdcall的区别
- mysql-master-ha:mysql master高可用性管理工具
- 表达式求值(一)
- 杂谈topcoder1——srm572 DistinctRemainders
- XP系统怎么设置共享无线网络?
- wince6.0编译命令分析
- 将maven项目部署到nexus的repository maven项目,可以通过maven的deploy插件,将之部署到远程服务器上,这样,该项目的artifact,就可以被其他项目通过pom的dep
- 简单排序之冒泡排序