C/C++
文章平均质量分 80
C/C++
Devin_white
我确实很懒
展开
-
函数调用堆栈详细过程
问题1:main函数调用sum,sum执行完后,怎么知道回到哪个函数中?问题2:sum函数执行完,回到main后,怎么知道从哪行指令开始运行。要描述一个栈,需要知道栈底和栈顶就可以了。其中esp来标识栈顶,ebp来标识栈底。(栈是从高地址向低地址增长的,所以ebp要比esp的地址大)原创 2022-10-30 16:34:48 · 570 阅读 · 0 评论 -
C中的可变参数列表的使用
一、可变参数列表的用途可变参数列表可以传递一组长度不定的入参。最典型的使用场景有 stdlib 的 printf,另外在cocos2d中也大量使用,例如CCMenu的create方法,ccanimation的创建之类的。不过按照我的理解,几乎80%的使用可变参数列表的场景,都可以使用数组来解决。但是使用可变参数列表的函数可以提供一种数组无法提供的东西:优雅。可以对比以下两种调用方式: int main(int argc, char ** argv) { varInputTest原创 2022-03-16 20:36:38 · 603 阅读 · 0 评论 -
C++中的类型转换
什么是类型转换?类型转换的含义是通过改变一个变量的类型为别的类型从而改变该变量的表示方式。为了类型转换一个简单对象为另一个对象你会使用传统的类型转换操作符。C与C++的类型转换C中:(T)element 或者 T(element)C++中:reinterpret_cast<T*> (expression)dynamic_cast<T*> (expression)static_cast<T*> (expression)const_c转载 2022-03-14 09:00:32 · 648 阅读 · 0 评论 -
关于linux下内存对齐的一些探究
C\C++中,尤其是linux下,关于内存对齐的一些总结和规律。原创 2022-01-14 20:48:14 · 1773 阅读 · 0 评论 -
C++ 11中的bind解析
参考自:https://blog.csdn.net/zhouguoqionghai/article/details/45770523bind函数的返回值是一个函数对象/仿函数, 统一的一致性语法。1、bind函数(包装器/适配器)能够将用户提供的需要一个参数的函数对象调整为不需要参数的函数对象。需要的时候,绑定的值(这个例子中是123)存储在函数对象中,自动地传递给用户指定的函数。f = bind(my_handler, 123)一个匿名类(即这里的binder类)的成员变量捕获了函数指针的值和原创 2022-01-08 20:51:34 · 2138 阅读 · 0 评论 -
C++有关排序的问题
1简述C++中经常会遇到与排序相关的问题,最常见的就是sort函数和priority_queue容器。对于基本数据类型,我们一般会按照升序或者降序来进行排列;而对于自定义的数据类型,我们通常需要自定义排序方案。2 sort的使用Sort函数使用模板: Sort(start,end,排序方法)2.1 用于基本数据类型以int类型为例。1 ) 默认从小到大排列sort默认下,也就是不适用第三个参数的时候,是升序排列。//从小到大排列vector<int> nums={13,原创 2021-12-11 14:10:54 · 1123 阅读 · 0 评论 -
LINUX C中的输入和输出使用方法!(结合在socket中的应用)
fgetsgetline等终端用什么普通文件用什么snprintf使用怎么这么广泛,为什么不用其他标准IO与文件IO,什么时候使用原创 2021-10-23 10:38:19 · 500 阅读 · 0 评论 -
C语言中的局部变量的作用域
局部变量是在函数内部定义的变量,它的作用域也仅限于函数内部,出了函数就不能使用了,我们将这样的变量称为局部变量(Local Variable)。函数的形参也是局部变量,也只能在函数内部使用。请看下面的例子:#include <stdio.h>int sum(int m, int n){ int i, sum=0; //m、n、i、sum 都是局部变量,只能在 sum() 内部使用 for(i=m; i<=n; i++) {原创 2021-10-19 16:37:26 · 2103 阅读 · 0 评论 -
sizeof和strlen的使用方法
首先得区别清楚:sizeof()是运算符,在头文件的类型为unsigned int,其运算值在编译时就计算好了,参数可以是指针、数组、类型、对象和函数等;strlen()是函数,要在运行时才能计算。参数必须是字符型指针(char*)。当数组名作为参数传入时,实际上数组就退化为指针了。该函数完成的功能是从代表该字符串的第一个地址开始遍历的,直到遇到结束符NULL。返回的长度大小不包括NULL。举个例子:char str[20] = “0123456789”;int a = strlen(str);转载 2021-10-18 19:25:28 · 364 阅读 · 0 评论 -
CppPrimer Plus Note
1 类型转换。将浮点数转换为整形时,C++采用截取而不是四舍五入的方法。2 以列表初始化变量时的类型转换(C++11)。1、 将使用{ }的初始化方式称为列表初始化。列表初始化来初始化变量并且存在类型转换的时候,类型转换的规则要比直接=严格。具体的说,列表初始化不允许缩窄转换(比如浮点数转换为整形在列表初始化中是不被允许的,而这在一般的=初始化中是被允许的,=初始化既允许缩窄转换,也允许扩张转换)。2、 使用列表初始化变量时,大括号前的=可以省略。3 union共用体他能够存储不同的数据类型原创 2021-08-14 17:13:56 · 154 阅读 · 0 评论 -
C语言解析http协议
1 关键解析函数1.1 strstr()函数原型:extern char *strstr(char *str1, const char *str2);str1: 被查找目标 str2: 要查找对象 返回值:若str2是str1的子串,则返回str2在str1的首次出现的地址;如果str2不是str1的子串,则返回NULL。例子:char str[]="1234xyz";char *str1=strstr(str,"34");// cout << str1 <<原创 2021-07-15 19:47:48 · 5286 阅读 · 0 评论 -
C++中cin的使用
一 读取字符串(尽量读取字符串到string对象)1 获取字符串到数组1 )cincinchar a[20]; cin>>a;则cin使用空白(空格、制表符和换行符)来确定字符串的结束位置,也就是说,cin>>a,只能获取单个单词。也即是说,从缓存中读取空白之前的单词,放在数组中,并在末尾自动添加空字符。注:cin对于空白的处理并不是舍弃,而是跳过。空白实际上还是在缓存中。2 )使用面向行的类成员函数:getline()和get(),都是一次读取一行字符串到数原创 2021-04-15 14:54:44 · 2727 阅读 · 0 评论 -
编译过程、可执行文件结构、make与Makefile
1 程序的编译过程参考自: link.首先提出几个问题:程序为什么要被编译器编译之后才可以运行?编译器在把C语言程序转换成可以执行的机器码的过程中做了什么?怎么做的?最后编译出来的可执行文件里面是什么?除了机器码还有什么?他们怎么存放的?怎么组织的?#include <stdio.h>是什么意思?把stdio.h包含进来意味着什么?C语言库又是什么?它怎么实现的?不同的编译器(Microsoft VC、GCC)和不同的硬件平台(x86、SPARC、MIPS、ARM),以及不同的操原创 2021-10-13 11:12:48 · 1070 阅读 · 0 评论