• 指针数组和数组指针


    以下程序的输出是(  )[美国某软件公司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。

  • 相关阅读:
    指针函数与函数指针
    多版本python共存
    【转】手把手教你用Strace诊断问题
    gearman安装问题总结
    【转】nginx+memcached构建页面缓存应用
    【摘自张宴的"实战:Nginx"】http auth baseic模块(打开页面需要密码验证)
    【转】nginx的模块变量(HTTP核心模块变量)
    【摘自张宴的"实战:Nginx"】try_files指令
    nginx显示目录下面的文件
    【摘自张宴的"实战:Nginx"】nginx配置
  • 原文地址:https://www.cnblogs.com/yihujiu/p/6368196.html
Copyright © 2020-2023  润新知