美文网首页IOS进阶iOS开发
十个关于指针的一些问题解答(面试必备)

十个关于指针的一些问题解答(面试必备)

作者: 小张_ZR | 来源:发表于2015-10-25 10:46 被阅读943次

    一、堆和栈上的指针

    1.指针所指向的这块内存是在哪里分配的,在堆上称为堆上的指针,在栈上为栈上的指针.

    2.在堆上的指针,可以保存在全局数据结构中,供不同函数使用访问同一块内存.

    3.在栈上的指针,在函数退出后,该内存即不可访问.

    二、什么是指针的释放?

    具体来说包括两个概念.

    1释放该指针指向的内存,只有堆上的内存才需要我们手工释放,栈上不需要.

    2将该指针重定向为NULL.

    三、数据结构中的指针?

    其实就是指向一块内存的地址,通过指针传递,可实现复杂的内存访问.

    四、函数指针?

    指向一块函数的入口地址.

    五、指针作为函数的参数?

    比如指向一个复杂数据结构的指针作为函数变量

    这种方法避免整个复杂数据类型内存的压栈出栈操作,提高效率.

    注意:指针本身不可变,但指针指向的数据结构可以改变.

    六、指向指针的指针?

    指针指向的变量是一个指针,即具体内容为一个指针的值,是一个地址.

    此时指针指向的变量长度也是4位.

    七、指针与地址的区别?

    区别:

    1指针意味着已经有一个指针变量存在,他的值是一个地址,指针变量本身也存放在一个长度为四个字节的地址当中,而地址概念本身并不代表有任何变量存在.

    2指针的值,如果没有限制,通常是可以变化的,也可以指向另外一个地址.

    地址表示内存空间的一个位置点,他是用来赋给指针的,地址本身是没有大小概念,指针指向变量的大小,取决于地址后面存放的变量类型.

    八、指针与数组名的关系?

    其值都是一个地址,但前者是可以移动的,后者是不可变的.

    九、怎样防止指针的越界使用问题?

    必须让指针指向一个有效的内存地址,

    1防止数组越界

    2防止向一块内存中拷贝过多的内容

    3防止使用空指针

    4防止改变const修改的指针

    5防止改变指向静态存储区的内容

    6防止两次释放一个指针

    7防止使用野指针.

    十、指针的类型转换?

    指针转换通常是指针类型和void *类型之前进行强制转换,从而与期望或返回void指针的函数进行正确的交接.

    相关文章

      网友评论

        本文标题:十个关于指针的一些问题解答(面试必备)

        本文链接:https://www.haomeiwen.com/subject/ljxxhttx.html