您的位置:首页 > 其它

一个关于的指针的经典笔试题目,加上自己的一点体会

2013-05-01 14:21 441 查看
关于一个经典的笔试题目, 用变量a给出下面的定义

a) 一个整型数(An integer)

b) 一个指向整型数的指针(A pointerto an integer)

c) 一个指向指针的的指针,它指向的指针是指向一个整型数(A pointer to a pointer to an integer)

d) 一个有10个整型数的数组(Anarray of 10 integers)

e) 一个有10个指针的数组,该指针是指向一个整型数的(An array of 10 pointers to integers)

f) 一个指向有10个整型数数组的指针(Apointer to an array of 10 integers)

g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a function that takes an integer as an argument andreturns an integer)

h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数( An array of ten pointers to functions that take an integer argumentand return an integer )

网上很多大侠解释过了这个问题,我只是用自己的理解方式再说一下,毕竟,你是要去面试的,准备一下还是应该的,记住,机会只会给有准备的人.好,废话少说.

这个题目是考查C的基本功,特别是指针,a,b,c,d我想大从数人都不会写错的吧.这里就不说了.我想说的是e,我们参考d的答案应该是int
a[10],这是一个有10个整型数的数组,那么我们这里要的是一个10个指针变量的数组,每个指针变量指向整型的数,首先想到的就是用int
*,那么可以这样写了int * (a[10]),这10个指针变量就是a[0],a[1],a[2]...每个指针变量指向一个整型数,这里要说的是数组中的[]号的优先级是要比*要高的,所以直接写成int
* a[10]就对了.接着看一下f,它强调地一个指针变量a,而只是该指针指向一个有10个整型数的数组.那么很自然是要这样写int
(*a)[10]了.接下g,它强调的一个指针int (*a)(int),要用括号把*a括起来,因为函数后面的()的优先级是比*要高的,不然写成int
*a(int),它的意思就是一个返回值为指针的函数a了,只是返回的指针指向一个整型数.最后我们说一下h,这个完全参考e,只是不要是指向10个整型数,而是10个函数,肯函数的返回值是整型的,


答案如下:

a: int a;
b: int *a;
c: int **a;
d: int a[10];
e: int * a[10];
f: int (* a)[10];
g: int (*a)(int);
h: int (*a[10])(int);


有一点概念要理解一下

下面这几句话不知道会不会误导各位,但是从谭老的书上确实是这样区别指针和指针变量,而我在看上面的题干时总是说的是指针,而不是指针变量.有点郁闷,有懂的朋友可以解释下.

请区分"指针"与"指针变量"这两个概念.例如,int a = 100;int * i = &a;假设a的内存地址是2000,那么i就是指针变量,它指向一个整型的数,可以说变量i的指针是2000(2000是内存地址),而不能说i的指针变量是2000.指针是一个地址,而指针变量是存放地址的变量.所以变量的指针就是变量的地址,存放变量地址的变量就叫指针变量
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: