zoukankan      html  css  js  c++  java
  • 面试题2

    一些关于C语言和数据相关的面试题。

    1.内存对齐是什么?

    为了方便操作系统快速访问内存的一种策略。在结构体中(struct),变量存储的首地址是k(4、8)的倍数。可以使用#pragma pack(n)设置。

    参考:博客园内存对齐

    2.栈和堆的区别(内存)?实现一个2维数组,初始化。

    栈是由系统自动分配空间,自动回收的,存储局部变量。堆是由人为的进行分配,人为释放,可分配的空间较大,内存不连续(链表链接),用来动态申请内存的。

    void *memset(void *s,int c,size_t n)

    总的作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c。

    注意memset初始化,因为memset是以字节为单位就是对array指向的内存的4个字节进行赋值,每个都用ASCⅡ为1的字符去填充,转为二进制后,1就是00000001,占一个字节。一个INT元素是4字节,合一起就是

        00000001000000010000000100000001
    就等于16843009,就完成了对一个INT元素的赋值了。所以用memset对非字符型数组赋初值是不可取的!
    #include<stdio.h>
    #include<stdlib.h>
    
    #define R 3
    #define C 4
    int **dynamic2array(int row,int column)
    {
        int **p;
        p=(int **)malloc(sizeof(int *)*row);
        int i=0;
        for(;i<row;i++)
        {
            p[i]=(int *)malloc(sizeof(int)*column);
            memset(p[i],1,column*sizeof(int));
        }
        return p;
    }
    int main()
    {
        int **p=dynamic2array(R,C);
        int i=0,j;
        for(;i<R;i++)
        {
            for(j=0;j<C;j++)
                printf("%d	",p[i][j]);
            int *s=p[i];
            free(s);
            s=NULL;
        }
        free(p);
        p=NULL;
        return 0;
    }

    参考:栈和堆memset动态申请2维数组

    3.strcpy和strncpy的缺陷?

    会出现内存越界、''丢失等情况。

    extern char * strcpy(char *dest,const char *src);复制src起始到''结束的字符串到dest中,返回dest。当dest长度小于src长度时,错误。

    char *strncpy(char *dest,const char *src,size_t num);复制src起始到num个字符到dest中,返回dest。最好紧接着执行dest[strlen(dest)-1]='';

    参考:区别实现

    4.c++中调用C函数加extern:

    http://songpengfei.iteye.com/blog/1100239

  • 相关阅读:
    JQuery对象操作支持链式法则源码分析
    JQuery + JSON作为前后台数据交换格式实践
    JQuery html API支持解析执行Javascript脚本功能实现-代码分析
    跨域访问实践
    XP下安装MAC OS虚拟系统
    Android APP开发笔记
    CSS浮动与清浮动
    LUA 模块化编程例子
    JavaScript解决命名冲突的一种方法
    XML中文本节点存储任意字符的方法
  • 原文地址:https://www.cnblogs.com/jhooon/p/3830546.html
Copyright © 2011-2022 走看看