sizeof
1. 对于字符数组,sizeof与strlen的值是否相同?
字符串数组,最后一个都是结束符’/0’,sizeof()计算占据的总内存空间,而strlen只是计算除开’/0’的字符数(可以见标准库的strlen的实现)
2. Sizeof本质上是函数还是宏?
Sizeof是一个运算符。
3. Sizeof返回值是什么?
Sizeof返回值是size_t,定义为unsigned int
指针
1. int *p; &p,p,*p各有什么意思?
&p:该指针的地址;
P:该指针的内容:一个内存地址;
*p:p中内存地址对应相应的值;
2. 你定义的指针初始化了没?
3. 你理解指针的指针的概念吗?你会使用吗?
指针的指针:它的内容就是一个指针(地址), :如char **argv;如指针数组char *p[10]
4. 你会定义函数指针?
void (*p)(int )
P是一个指针,它指向了一个函数,该函数没有返回值,参数是一个int变量;
typdef void (*p)(int);
p f1;
p f2;就可以类似地定义函数指针了。
5.你会使用函数指针调用函数吗?
函数名与函数指针都一样的,都是函数指针。函数名是一个const函数指针,而函数指针是一个函数指针变量。至于四种调用方法都可以,那是C语言的设计者规定的,主要是书写和阅读方便.
动态分配内存
1. 动态分配的内存放在什么地方?
堆。
2.什么情况下要动态分配内存?
http://topic.csdn.net/u/20100105/14/41be196f-a5a8-4521-b771-8ecf2292bd70.html
malloc使用的情况一般有两种:
1.需要申请的内存太大了,一般栈的内存为1M,如果数组大于栈内存,就要malloc
2.申请的内存大小不定,例如你要使用大小为n的内存,但是n是多少你并不知道,这时没法用char k[n];因为编译器不支持你用变量n来声明数组,此时要用malloc
2. 动态申请的内存一定要释放,否则会内存泄露。你是否使用过内存检测工具?
在博文htp://www.cnblogs.com/da6wei6/archive/2008/09/07/1286400.html中,介绍了很多检测内存泄露的工具。
《C专家编程中》的第七章亦对该问题有描述,简单摘要如下:
避免内存泄露:
每次当调用malloc分配内存的时候,注意在以后调用相应的free来释放它。
一种简单的方法就是在可能的时候使用alloca()来分配动态内存,以避免出现上述情况。当离开调用alloca的函数,它所分配的内存会被自动释放。(注:alloca函数是依赖于机器和编译器的,没有较好的可移植性,注意不要使用free释放alloca分配的空间.)
如何检测内存泄露
1. 使用swap命令观察还有多少可用的交换空间
在一分钟内键入该命令三到四次,看看可用的交换区是否在减小。如果发现不断有内存被分配且从不被释放,一个可能的解释就是出现了内存泄露;
2. 确定可疑的进程,看看它是不是该为内存泄露负责。
使用ps – lu用户名来显示所有进程的大小。同样数次重复这个命令,如果一个进程不断增长而从不缩小,那么它就有可能出现了内存泄露。