C/C++

c基础自问自答

最近由于工作的需要也由于希望能够更加的理解PHP的底层实现机制,所以开始了边看PHP源码边拾起c的旅程,前前后后两个星期,重新翻看了《C Primer Plus》和最近反响不错的Head First出品的《嗨翻C语言》。由于大学时期也弄了不少C程序,但看书过程中还是收获到了很多的知识,所以在这里加以整理。这篇东西整理的并不系统,仅仅属于个人杂记,所以谨慎观看。

1.各种不同的变量是存储在内存的哪个部分呢?
简介:首先,让我们看看计算机的内存是怎样规划的,如图,计算机按照从上到下的顺序将内存划分为栈、堆、全局量、常量段和代码段这几个部分。
内存管理
答:
①在函数内声明的变量,俗话说的局部变量通常保存在栈中
②在函数外声明的变量,俗话说的全局变量通常保存在全局量中
③通过malloc()动态创建的变量通常保存在堆中
④char *name = “Wenzhi Xu”;”Wenzhi Xu”会存放在常量区,而name这个变量会指向”Wenzhi Xu”的首地址。注意,既然是常量区,就不能去更改它的值
④char name[] = “Wenzhi Xu”;这种以字符数组的方式创建字符串的方式比较特殊,”Wenzhi Xu”会首先存放在常量区,然而还没结束,毕竟name是一个数组,所以之后会在栈上去创建这个数组

2.使用scanf()的时候要小心什么?
简介:看下面这个例子,就是定义了一个book,然后输入一个书名而已

#include<stdio.h>
int main(int argc, char *argv[]){
    char book[20];
    printf("输入你最喜欢的一本书:");
    scanf("%s", book);
    printf("\n你最喜欢的一本书是:%s\n", book);
    return 

valgrind入门

valgrind-100
valgrind是什么?
答:valgrind是一个检查C代码是否存在内存泄露的工具,当我们通过malloc()创建动态空间的时候,如果没有及时的free掉,那么这块动态空间别人也会用不了,长此以往,内存会越来越小,导致计算机越来越慢。