指针数组和数组指针
2017-02-05 17:36
239 查看
以下程序的输出是( )[美国某软件公司2009年12月面试题目]
解析:本题定义一个指针指向一个10个int元素的数组。a+1表明a指针向后移动
1*sizeof(数组大小);a+1后共向后移动40个字节。*a+1仅针对这一行向后移动4个字节,如下
图所示。
答案:输出如下:
1 11 2 2 11
一个指向整型数组的指针的定义为( )。
A.int (*ptr)[]
B.int *ptr[]
C.int *(ptr[])
D.int ptr[]
解析:
int (*ptr)[]是一个指向整型数组的指针。
int *ptr[]是指针数组,ptr[]里面存的是地址。它指向位置的值就是*ptr[0]、
*ptr[1]、*ptr[2]、*ptr[3]。不要存*ptr[0]=5;、*ptr[1]=6;,因为这里面没有相应
的地址。
int *(ptr[])与B相同。
int ptr[]是一个普通的数组。
答案:A
--------------------------------------------------------------------------------------------------------------------------------------------------------------
a是指针数组,是指一个数组里面装着指针。
b是指向数组的指针,代表它是指针,指向整个数组。
以下是指针数组a:
下面是数组指针b:
------------------------------------------------------------------------------------------------------------------------------------------------------
写出如下程序片段的输出。[美国某著名CPU生产公司面试题]
解析:第一个结果好理解,是正常的指针运算。但是第二个却有点难以理解。
第二个的确是5。首先a表示一个1行5列数组,在内存中表示为一个5个元素的序列。int
*ptr=(int*)(&a+1)的意思是,指向a数组的第6个元素(尽管这个元素不存在)。那么显然,
(ptr-1)所指向的数据就是a数组的第5个元素——5。
如果存在这样的数组:
那么显然:
实际上,b的数据分布还是按照1、2、3、4、5、6、7、8、9、10分布的,所谓b[0]和
b[1]实际上只是指向其中一个元素的指针。
时刻牢记这样的观点:数组名本身就是指针,再加个&,就变成了双指针,这里的双指
针就是指二维数组,加1,就是数组整体加一行,ptr指向a的第6个元素。
答案:2,5。
解析:本题定义一个指针指向一个10个int元素的数组。a+1表明a指针向后移动
1*sizeof(数组大小);a+1后共向后移动40个字节。*a+1仅针对这一行向后移动4个字节,如下
图所示。
答案:输出如下:
1 11 2 2 11
一个指向整型数组的指针的定义为( )。
A.int (*ptr)[]
B.int *ptr[]
C.int *(ptr[])
D.int ptr[]
解析:
int (*ptr)[]是一个指向整型数组的指针。
int *ptr[]是指针数组,ptr[]里面存的是地址。它指向位置的值就是*ptr[0]、
*ptr[1]、*ptr[2]、*ptr[3]。不要存*ptr[0]=5;、*ptr[1]=6;,因为这里面没有相应
的地址。
int *(ptr[])与B相同。
int ptr[]是一个普通的数组。
答案:A
--------------------------------------------------------------------------------------------------------------------------------------------------------------
a是指针数组,是指一个数组里面装着指针。
b是指向数组的指针,代表它是指针,指向整个数组。
以下是指针数组a:
下面是数组指针b:
------------------------------------------------------------------------------------------------------------------------------------------------------
写出如下程序片段的输出。[美国某著名CPU生产公司面试题]
解析:第一个结果好理解,是正常的指针运算。但是第二个却有点难以理解。
第二个的确是5。首先a表示一个1行5列数组,在内存中表示为一个5个元素的序列。int
*ptr=(int*)(&a+1)的意思是,指向a数组的第6个元素(尽管这个元素不存在)。那么显然,
(ptr-1)所指向的数据就是a数组的第5个元素——5。
如果存在这样的数组:
那么显然:
实际上,b的数据分布还是按照1、2、3、4、5、6、7、8、9、10分布的,所谓b[0]和
b[1]实际上只是指向其中一个元素的指针。
时刻牢记这样的观点:数组名本身就是指针,再加个&,就变成了双指针,这里的双指
针就是指二维数组,加1,就是数组整体加一行,ptr指向a的第6个元素。
答案:2,5。
相关文章推荐
- C语言指针系列 - 一级指针.一维数组,二级指针,二维数组,指针数组,数组指针,函数指针,指针函数
- 理解数组指针和指针数组的区别
- 彻底了解指针数组,数组指针,以及函数指针,以及堆中的分配规则
- 数组指针与指针数组的区别
- C语言中,指针,引用,二维数组,指针数组,数组指针的解析
- c_指针_指针数组与数组指针
- 彻底了解指针数组,数组指针,以及函数指针,以及堆中的分配规则
- 指针数组和数组指针
- C语言 指针 详解 三 C语言数组指针(指向数组的指针)
- 数组指针与指针数组的区别
- 数组指针和指针数组的区别(转)
- 为什么必须将二维数组数组名赋予数组指针(行指针)而不能赋给指针数组或者二级指针?
- 数组指针和指针数组的区别
- 指针数组和数组指针(C)
- 二维数组(循环数组——魔方阵)、数组指针与指针数组、const
- 彻底了解指针数组,数组指针,以及函数指针,以及堆中的分配规则(转)
- 数组和指针、数组指针和指针数组
- 数组指针和指针数组
- 彻底了解指针数组,数组指针,以及函数指针
- 详解指针数组,数组指针,函数指针,以及堆中的分配