• [面试题] ios,c


    1.main(  )

    { int a[5]={1,2,3,4,5}; 

    int *ptr=(int *)(&a+1);  

    printf("%d,%d",*(a+1),*(ptr-1));

    }

    答:2,5

    *(a+1 就是a[1] *(ptr-1)就是a[4],执行结果是25 &a+1不是首地址+1系统会认为加一个a数组的偏移是偏移了一个数组的大小本例是5个int int *ptr=(int *)(&a+1); 则ptr实际是&(a[5]),也就是a+5 原因如下 &a是数组指针其类型为 int (*)[5]; 而指针加1要根据指针类型加上一定的值 不同类型的指针+1之后增加的大小不同 a是长度为5的int数组指针所以要加 5*sizeof(int)

    所以ptr实际是a[5]

    但是prt与(&a+1)类型是不一样的(这点很重要) 所以prt-1只会减去sizeof(int*) a,&a的地址是一样的但意思不一样a是数组首地址也就是a[0]的地址&a是对象数组首地址a+1是数组下一元素的地址即a[1],&a+1是下一个对象的地址即a[5].

    2,写一个预处理指令

    #define SECONDS_PER_YEAR (60*60*24*365) UL

    #define MIN(A,B) ((A)<=(B) ?(A):(B))

    3.static 关键字的作用

    答: 答:(1)static作用于局部变量,使得局部变量变成局部静态变量,改变了变量的生存期;(2)static作用于全局变量,使其变成静态全局变量,改变变量的作用域,使得其不可扩展声明到别的文件中,只能在本文件中调用;(3)static作用于外部函数,使其成为静态函数,使得函数不能扩展声明到别的文件中,只得 在本文件中调用。

    6.下面四个用const修饰指针有什么区别(10分)?

    const int* p;

    int const* p;

    int* const p;

    const int* const p;

    答:前两个的作用是一样,a是一个常整型数。第三个意味着a是一个指向常整型数的指 针(也就是,整型数是不可修改的,但指针可以)。第四个意思a是一个指向整型数的常指针(也就是说,指针指向的整型数是可以修改的,但指针是不可修改 的)。最后一个意味着a是一个指向常整型数的常指针(也就是说,指针指向的整型数是不可修改的,同时指针也是不可修改的)。

    7. 简述内存分区情况,说明各分区存放的什么样的数据

    答:代码区:存放函数二进制代码;

    数据区:存放全局变量、静态变量、常量等;

    堆区:程序员手动申请的;

    栈区:局部变量、函数形参。

    8. #include<filename>和#include”filename”有什么区别

    答:#include<filename>直接在库文件目录中搜索所包含的文件;#include”filename”先在当前目录下搜索所包含的文件。如果没有的话,再到库文件目录搜索。

    9. 写一个函数,交换两个整数,至少使用两种方法

    @font-face { font-family: "宋体"; }@font-face { font-family: "Cambria Math"; }@font-face { font-family: "@宋体"; }@font-face { font-family: "Cambria"; }@font-face { font-family: "华文宋体"; }@font-face { font-family: "@华文宋体"; }p.MsoNormal, li.MsoNormal, div.MsoNormal { margin: 0cm 0cm 0.0001pt; text-align: justify; font-size: 12pt; font-family: Cambria; }p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph { margin: 0cm 0cm 0.0001pt; text-align: justify; text-indent: 21pt; font-size: 12pt; font-family: Cambria; }.MsoChpDefault { font-family: Cambria; }div.WordSection1 { page: WordSection1; }

    答:void Swap(int* _x,int* _y)

    {

    int nTmp = *_x;

    *_x = *_y;

    *_y = nTmp;

    }

    void Swap(int* _x,int* _y)

    {

    *_x = *_x ^ *_y;

    *_y = *_x ^ *_y;

    *_x = *_x ^ *_y;

    }

      表达式10&15表示(1010 & 1111),它将返回表示1010的值10。因为真真得真,或者是11得1,同位全是1结果也是1
       表达式10|15表示(1010 | 1111),它将返回表示1111的值15。假假得假。全零得零。
       表达式10^15表示(1010 ^ 1111), 它将返回表示0101的值5。此时是同性相斥,相同的就为假。
       表达式~10表示(~1010),它将返回表示0101的值 -11。此号好理解,按位取反

     

     

  • 相关阅读:
    常用的XML读写
    未能使用提供程序 "RsaProtectedConfigurationProvider" 进行解密 的解决办法
    (原创)Urlrewrite 独立配置文件的使用方法
    The Two Interceptors: HttpModule and HttpHandlers
    根据最后修改时间查询存储过程
    Net下WinForm皮肤插件资源
    C# 主线程 辅助线程
    浅述WinForm多线程编程与Control.Invoke的应用
    ASP.NET实现图片防盗链
    URLRewrite 实现方法详解
  • 原文地址:https://www.cnblogs.com/jinjiantong/p/3042074.html
Copyright © 2020-2023  润新知