一些关于内存的杂七杂八小笔记
1.全局变量和局部变量在内存上的区别是什么:
全局变量保存在内存的全局存储区中,占用静态的存储单元;局部变量保存在栈中,只有在所在函数被调用时才动态地为变量分配存储单元。
C语言中的全局变量和局部变量在内存中是有区别的。C语言中的全局变量包括外部变量和静态变量,均是保存在全局存储区中,占用永久性的存储单元;局部变量,即自动变量,保存在栈中,只有在所在函数被调用时才由系统动态在栈中分配临时性的存储单元。
(39条消息) 全局变量和局部变量在内存中的区别_taxue505的博客-CSDN博客_全局变量和局部变量在内存中的区别是什么
2.realloc函数的内存二三事
1)realloc涉及到oldptr和newptr,故应为newptr=(数据类型*)realloc(oldptr,size);如果oldptrt指向的指针内存不满足newptr所需,则是开辟一段新的空间,并把oldptr内容复制给newptr,并将oldptr释放。故因由ptr=(数据类型*)realloc(ptr,size);而若满足的话,仅仅是把指向的那个内存块扩大。其它均不变。
C语言 realloc为什么要有返回值,realloc返回值具体解释/(解决随意长度字符串输入问题)。 - mengfanrong - 博客园 (cnblogs.com)
2.scanf和getchar交替输入的二三事
例如while(1){scanf("%d",&a);getchar(ch);}这里scanf和getchar交替使用缓冲区,数据在使用过程中被对应函数取走所需内容。
(缓冲区)scanf函数读取缓冲区数据的问题 - yhjoker - 博客园 (cnblogs.com)
由于scanf和getchar使用行缓冲,故哪怕是scanf("%d",&a);如果不按回车,scanf也永远吸收不到自己需要的内容。
(39条消息) C语言联用scanf和getchar实现无限输入与终止循环__hailo_的博客-CSDN博客_c语言无输入停止循环
一、scanf输入%d的规则:
scanf在输入%d时的读取规则是,先判断是否是数字,如果是的话则继续读取直到非数字为止,将这些数字转化为int型输入。而如果一开始输入的不是数字,则有可能陷入死循环。因为此时%d停止了输入,并未从缓冲区中读取这个非数字,而下一次再次使用scanf输入%d时,同样是先读取缓存区内的内容,而这个内容就是这些非数字,他们并未被上一次%d读取,而同样又导致了这次%d的停止。