zoukankan      html  css  js  c++  java
  • 指针数组和数组指针

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

  • 相关阅读:
    vue解决IOS虚拟键盘遮挡固定定位input框
    vue 子组件传父组件
    Vue同时监听多个数据
    JS判断是安卓还是IOS
    JS时间戳转日期格式
    html静态页面配置微信分享
    关于前端的宝藏网站(持续更新...)
    IDEA界面美化
    IntelliJ IDEA创建JavaWeb项目
    制作PDF
  • 原文地址:https://www.cnblogs.com/yihujiu/p/6368196.html
Copyright © 2011-2022 走看看