![](https://img-blog.csdnimg.cn/20190918140037908.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C
文章平均质量分 76
w
4nc414g0n
这个作者很懒,什么都没留下…
展开
-
函数栈帧的创建和销毁(详细)
函数栈帧的创建和销毁main函数被调用的过程:具体过程main函数被调用的过程:mainCRTStartup() 调用 _tmainCRTStartup() 再调用 main()寄存器:ebp(栈底指针),esp(栈顶指针)(sp 是esp的低16位,esp是rsp的低32位,ss是16位堆栈段寄存器)了解更多:x86汇编学习历程7----从1加到100并显示(引入栈)具体过程C代码如下:#include <stdio.h>int Add(int x, int y)原创 2021-08-10 13:10:20 · 706 阅读 · 1 评论 -
C语言----程序编译(预处理)
下面是从test.c到运行结果的大体过程编译1)预编译gcc test.c -E > test.i预处理后停止完成文本操作完成头文件包含#define定义的符号和宏的替换去除注释2)编译gcc test.i -S生成test.s的文件把C语言代码转化为汇编代码编译部分深入学习编译原理语法分析词法分析语义分析符号汇总1).把c程序所有的全局符号汇总(add.c中的全局符号是Add,test.c中全局符号为main和Add)3)汇编P原创 2021-07-26 13:38:20 · 369 阅读 · 0 评论 -
C语言----文件操作
加粗样式原创 2021-07-23 11:35:53 · 155 阅读 · 0 评论 -
C语言----四道题充分体会动态内存错误
第一题void GetMemory(char *p){ p = (char *)malloc(100);}void Test(void){ char *str = NULL; GetMemory(str); strcpy(str, "hello world"); printf(str);}分析:p地址并未返回,str仍为空 strcpy目标地址为空->出错并且p未被释放->内存泄漏第二题char *GetMemory(void){ char p[]原创 2021-07-21 22:51:20 · 146 阅读 · 0 评论 -
C语言----操作和注意点(待补充)
~scanf()和scanf()!=EOF效果相同scanf的返回值是输入值的个数如果没有输入值就是返回-1-1按位取反结果是0EOF值为-1数组传参习惯加上断言 assert(arr)头文件<assert.h>使用getchar()清除缓冲区getchar()读取到EOF就结束读取(CTRL+Z)相当于EOF输入函数是从缓冲区去拿,键盘输入缓冲区srand((unsigned int)time(NULL));printf("%d",rand()%100.原创 2021-07-19 10:11:09 · 197 阅读 · 0 评论 -
C语言----动态内存
普通变量创建开辟空间大小是固定的数组在申明的时候,必须指定数组的长度,它所需要的内存在编译时分配(柔性数组除外,后文会写到)在内存中如图 所以就有了动态内存动态内存函数1)mallocvoid* malloc( size_t size );size是分配未初始化储存的字节大小如果开辟成功,则返回一个指向开辟好空间的指针。如果开辟失败,则返回一个NULL指针,因此malloc的返回值一定要做检查。返回值的类型是 void* ,所以malloc函数并不知道开辟空间的类型,...原创 2021-07-18 15:59:34 · 159 阅读 · 0 评论 -
C语言----结构体,枚举,共用体
。。原创 2021-06-13 20:13:19 · 331 阅读 · 0 评论 -
C语言----string函数和memory函数
1.字符串函数头文件<string.h>strlen()strcpy()strcat()strcmp()strstr()strtok()strerror()1)strlen()size_t strlen ( const char * str );返回类型为无符号整形所以当遇到strlen("hi")-strlen("hello");结果会是一个正数模拟实现strlen#include <stdio.h>#include <assert.h>原创 2021-06-07 12:21:31 · 1047 阅读 · 0 评论 -
C语言----数据的存储
数据的存储数据类型整形类型char:0-127(注意:char未规定为是signed char还是unsigned char,但大多数编译器为signed)signed char: -128-127unsigned char: 0-255short int: -32768-32767unsigned short int: 0-65535int: -32768-32767(注意:int为 signed int)unsigned int: 0-65535long int: -2147483原创 2021-05-22 14:00:19 · 327 阅读 · 0 评论 -
C语言----指针进阶
C/C++会把常量字符串存储到单独的一个内存区域,当几个指针。指向同一个字符串的时候,他们实际会指向同一块内存。但是用相同的常量字符串去初始化不同的数组的时候就会开辟出不同的内存块sizeof(数组名),&数组名 表示整个数组,除此之外数组名都是首元素地址二维数组名是首元素元素的地址int a[]={1,2,3,4,5};int b[]={1,2,3,4,5};int c[]={1,2,3,4,5};int *arr[3]={a,b,c};for(int j=0;j<3;原创 2021-06-03 13:57:22 · 148 阅读 · 0 评论