C/C++面试题汇总

来源:互联网 发布:av淘宝备用网址 编辑:程序博客网 时间:2024/05/29 03:02

请简单描述Windows内存管理的方法。

联合(union)和结构体(struct)所占内存

struct  temp
{
unsigned short a;
unsigned short b;
unsigned short c;
};

答:大小为6

union  temp
{
unsigned short a;
unsigned short b;
unsigned short c;
};

答:大小为2


char *str = "abcd";
str[1] = 'd';

编译正确;运行时出错

指针是不分配内存的,它指向的是系统的只读的内存,而数组是分配内存的,
就是将系统的只读的内存里面的值复制到它的内存里面,因此可读写

char * str = "abcd";

sizeof(str) 相当于sizeof(char*)=4//注:所有的指针大小都为4

sizeof(*str)=1相当于sizeof('a') = 1;//注:char * str = "abcd";中的每个字符都可访问(用str[i]),就是不能修改。

sizeof(str + 2)=4//指针大小

sizeof("abcd")=5;


.关于断言的相关知识


写出程序结果:
void Func(char str[100])
{
  printf("%d\n", sizeof(str));
}

答案 100


int id[sizeof(unsigned long)];
    这个对吗?为什么??

答:

这个 sizeof是编译时运算符,编译时就确定了
可以看成和机器有关的常量。

http://bbs.csdn.net/topics/310055283


(1)const char*p

(2)char const*p

(3)char *const p
(4)const char **p

(5)char const**p

(6)char *const *p

(7)char **const p

http://www.cnblogs.com/rushuizhijing/archive/2011/08/26/2154737.html

inline函数

int g(int x) { return x + x; } int f() { return g(); } 这样f会调用g,然后g返回x + x给f,然后f继续把那个值返回给调用者。 如果g是inline的话。f会被直接编译成。 int f() { return x + x; } 相当于把g执行的操作直接融合到f里。这样减少了调用g消耗的时间,但同时也增大了f的尺寸

注意:1.内联函数避免函数调用的开销

2.内联函数定义应放入头文件中。



char *a="test string"; 只需要传入地址, 不另外分配内存空间, 
char a[]="test string"; 则需要分配内存空间, 再复制字符串


new int(10) 和 new int[10]的区别  new int(10) 分配一个int型空间,值为10.  new int[10]分配10个int。


存储器大小端存储 http://blog.sina.com.cn/s/blog_52009a100100hign.html


extern的使用http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777431.html

只在头文件中做声明。真理总是这么简单。

extern 表明该变量在别的地方已经定义过了,在这里要使用那个变量.

 static 表示静态的变量,分配内存的时候, 存储在静态区,不存储在栈上面.


注意bool t =-1;结果为1


va_start、va_end、va_list的使用  http://www.cnblogs.com/rainduck/archive/2010/11/10/1873417.html


原创粉丝点击