【C++】指针数组和数组指针
首先的首先,稍微抱怨一下阿里今天的严重失误。说好的晚六点笔试,说好的务必提前半小时到场。六点十五的时候告诉闷在一个大教室里躁动的我们“今天七点半开考,大家先回去吧,七点半再过来”,满脸黑线…等到七点半,嗯,没消息…等到八点,嗯,继续没消息…等到八点半,嗯,还是没消息…约八点四十通知,今天不考了,大家回去吧。。。点点点有木有,三个多小时啊~嗯,淡定,大家都不容易。不过今晚北京的天着实不错,也总算还是有点美好的事物的。((⊙o⊙)…呃,现在应该说是昨天了…)
然后的然后,今天科普吧。很简单的问题,关于指针的。
用变量a给出下面的定义。
(1)一个整型数(An integer)
(2)一个指向整型数的指针(A pointer to an integer)
(3)一个指向指针的指针,它指向的指针是指向一个整型数(A pointer to a pointer to an integer)
(4)一个有10个整形数的数组(An array of 10 integers)
(5)一个有10个指针的数组,该指针是指向一个整型数的(An array of 10 pointers to integers)
(6)一个指向有10个整型数数组的指针(A pointer to an array of 10 integers)
(7)一个指向函数的指针,该函数有一个整形参数并返回一个整型数(A pointer to a function that takes an integer as an integer argument and returns an integer)
(8)一个有10个指针的数组,该指针指向一个函数,该函数有一个整形参数并返回一个整型数(An array of 10 pointers to functions that take an integer argument and return an integer)
答案:
(1) int a; // An integer
(2) int *a; // A pointer to an integer
(3) int **a; // A pointer to a pointer to an integer
(4) int a[10]; // An array of 10 integers
(5) int *a[10]; // An array of 10 pointers to integers
(6) int (*a)[10]; // A pointer to an array of 10 integers
(7) int (*a)(int); // A pointer to a function that takes an integer as an integer argument and returns an integer
(8) int (*a[10])(int); // An array of 10 pointers to functions that take an integer argument and return an integer
是很简单吧。主要想说的是 5 和 6,可能之前不怎么用到,总是分不清楚,这次在《程序员面试宝典》上看到了,就正好做个总结。
其实要记也不难,6 用一个括号把 * 和 a 括起来,就当 * 离 a 近,表示 a 是一个指针,指向什么呢,指向的是一个数组,数组包含 10 个整型数。
5 没用括号,就当 a 离 [] 近,表示 a 是一个数组,数组里面存了什么呢,存的是指向整型数的指针。
(题外:
这让我想起了之前的一个笔试题,也科普一下好了:
Please choose the right statement about const usage:
A. const int a; //const integer
B. int const a; //const integer
C. int const *a; //a pointer which point to const integer
D. const int *a; //a const pointer which point to integer
E. int const *a; // a const pointer which point to integer
答案应该是:ABC
const* 常量指针(按顺序翻译),即常量的指针,一个指向常量的指针;
*const 指针常量(按顺序翻译),即指针的常量,指针本身是一个常量。
和在 int 前后没关系,只看 const 和 * 的相对位置即可,所以 A 和 B 是一样的,C 和 D 是一样的。
另外,const 在声明的时候要同时初始化,之后不能修改,所以其实上面的选项作为一行代码编译都是不过的……
下面回到正题)
比如下面一段程序
#include <iostream>
using namespace std; int main()
{
int v[][] = {{, , , , , , , , , }, {, , , , , , , , , }};
int (*a)[] = v;
cout << **a << endl;
cout << **(a+) << endl;
cout << *(*a+) << endl;
cout << *(a[]+) << endl;
cout << *(a[]) << endl;
return ;
}
输出是:1 11 2 2 11。
本题定义一个指针指向一个 10 个 int 元素的数组。a+1 表明 a 指针向后移动 1*sizeof(数组大小);a+1 后共向后移动 40 个字节。 *a+1 仅针对这一行向后移动 4 个字节,如下图。

本来是昨天要发的,结果昨天有事写了一半推迟到现在才写完……
今天还遇到了一个这样的相关问题,以后再讲吧。
【C++】指针数组和数组指针的更多相关文章
- C与指针(结构体指针,函数指针,数组指针,指针数组)定义与使用
类型 普通指针 指针数组(非指针类型) 数组指针 结构体指针 函数指针 二重指针 定义方式 int *p; int *p[5]; int (*p)[5]; int a[3][5]; struct{.. ...
- C和指针 第八章 数组
8.1 数组名和指针 int a; int b[10]; a称为一个标量,表示一个单一的值,变量的类型是整数. b是数组,b[1]的类型是整数,b是一个指针常量,表示数组第一个元素的地址.b的类型取决 ...
- 不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象, const 指针和指向 const 对象的指针, const 对象的引用
[源码下载] 不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象, const 指针和指向 const 对象的指针, con ...
- C/C++中数组转换成指针的情况
数组转换成指针:在大多数用到数组的表达式中,数组自动转换成指向数组首元素的指针.比如: int ia[10]; int *p = ia; //ia转换成指向数组首元素的指针 以下情况上述转换不会发生: ...
- 指针数组 vs 数组指针
指针数组,故名思义,就是指针的数组,数组的元素是指针: 数组指针,同样,就是直想数组的指针. 简单举例说明: int *p[2]; 首先声明了一个数组,数组的元素是in ...
- c/c++ 函数指针 指针函数 数组的引用 指针数组 数组指针
1.指针数组数组指针 引用数组 数组的引用 int *a[10] 指针数组 每一个元素都是一个指针 Int (*a)[10] 数组指针 P指向一个含有10个元素的数组 Int (&a)[10] ...
- C/C++中的指针数组和数组指针
1. 指针数组 定义:int *p[n],由于[]的优先级高于*,p和[]结合成一个数组,该数组的元素存储的是int类型的指针,由于数组内容是指针,因此p+1的步长是sizeof(int*),在32位 ...
- C++中,指针数组和数组指针
这俩兄弟长得实在太像,以至于经常让人混淆.然而细心领会和甄别就会发现它们大有不同. 前者是指针数组,后者是指向数组的指针.更详细地说. 前: 指针数组;是一个元素全为指针的数组. 后: 数组指针;可以 ...
- 【C语言】12-指向一维数组元素的指针
一.用指针指向一维数组的元素 1 // 定义一个int类型的数组 2 int a[2]; 3 4 // 定义一个int类型的指针 5 int *p; 6 7 // 让指针指向数组的第0个元素 8 p ...
- PHP中使用数组指针函数操作数组示例
数组的内部指针是数组内部的组织机制,指向一个数组中的某个元素.默认是指向数组中第一个元素通过移动或改变指针的位置,可以访问数组中的任意元素.对于数组指针的控制PHP提供了以下几个内建函数可以利用. ★ ...
随机推荐
- Linux查看文件以及文件夹的大小
df可以查看一级文件夹大小.使用比例.档案系统及其挂入点,但对文件却无能为力.du可以查看文件及文件夹的大小. df命令可以显示目前所有文件系统的可用空间及使用情形,请看下列这个例子: df命令可以查 ...
- 应用程序域(Application Domain)
应用程序域为隔离正在运行的应用程序提供了一种灵活而安全的方法. 应用程序域通常由运行时宿主创建和操作. 有时,您可能希望应用程序以编程方式与应用程序域交互,例如想在不停止应用程序运行的情况下卸载某个组 ...
- hdu 2988 Dark roads
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2988 Dark roads Description Economic times these days ...
- Spring框架中的IOC和DI的区别
上次面试被问到IOC和DI的区别时,没怎么在意,昨天又被问到,感觉有点可惜.今晚总算抽点时间,查看了spring官方文档.发现,IoC更像是一种思想,DI是一种行为.为了降低程序的耦合度,利用spri ...
- 苹果HomeKit如何牵动全国智能硬件格局
苹果HomeKit如何牵动全国智能硬件格局 2014-06-23 15:48 发表 系统分类:消费电子 自定义分类:默认 标签:智能家居 苹果在6月的WWDC开发者大会上发布了包括 ...
- ios8/sdk8/xcode6/iphone6(+)适配
AppIcon https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/Ic ...
- Swift Explore - 关于 Swift 中的 isEqual 的一点探索
在我们进行 App 开发的时候,经常会用到的一个操作就是判断两个对象是否相等.比如两个字符串是否相等.而所谓的 相等 有着两层含义.一个是值相等,还有一个是引用相等.如果熟悉 Objective-C ...
- 主要从架构上来做优化,负载均衡、CDN、静态化、数据库的水平切割和纵向切割、读写分离、分布式缓存着手
语言知识一种工具,甚至技术本身也只是一种工具,本身并不值钱,关键在于用于何种行业,产生了什么价值. 但从语言来看,我个人更喜欢php,然后是C#,然后是java从框架而言,先是java,然后C#,再次 ...
- VS 与 SQLite数据库 连接
SQLite并没有一次性做到位,只有下载这些东西是不能放在vs2010中并马上使用的,下载下来的文件中有sqlite3.c/h/dll/def,还是不够用的.我们需要的sqlite3.lib文件并不在 ...
- C++设计模式——享元模式
本文版权归果冻说所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利.如果这篇文章对你有帮助,你可以请我喝杯咖啡. » 本文链接:http:// ...