![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言学习
井底小鱼
这个作者很懒,什么都没留下…
展开
-
文件中读取连续数字 fscanf
概述fscanf 函数原型为 int fscanf(FILE * stream, const char * format, [argument…]); 其功能为根据数据格式(format),从输入流(stream)中读入数据,存储到argument中,遇到空格和换行时结束,类似于scanf。fscanf位于C标准库头文件<stdio.h>中。函数声明int fscanf(FILE *stream, char *format[,argument…]);参数stream-- 这是指向 F原创 2021-12-15 10:08:41 · 1142 阅读 · 0 评论 -
初始化与赋初值含义和区别
个人理解:初始化目的是在执行某操作之前,对相关结构进行无效化配置的操作流程,使环境得到清理,后续流程使用该配置值可以正常按照预期执行程序流程;如在不同场景中无效值可以为全0,全f,‘CD’序列等;所谓无效化配置,是针对有效配置而言的。赋初值与初始化的执行时机大致相同,不同点在于所赋的值可以是有意义的默认值,比如将返回值初值赋为FAIL,中间流程可更改,最终返回。...原创 2020-04-01 22:08:34 · 2337 阅读 · 0 评论 -
gets循环接收输入字符串
char str1[101];char str2[101];While(gets(str1) != NULL &&gets(str2) != NULL ){…}注意:gets(pStr)与scanf之间的差异:后者遇到空格’ '会结束字符接收!与gets相对的为puts()...原创 2020-04-01 22:04:02 · 2252 阅读 · 0 评论 -
C语言中单引号与双引号的区别
单引号表示单个字符,如:‘a’,而双引号则表示一个字符串,并以’\0’作为结束,如字符串"a"其实包含了两个字符:‘a’和’\0’C中, 在做字符比较时只能使用单引号。...原创 2020-04-01 21:59:18 · 1254 阅读 · 0 评论 -
线程栈
一个进程中的所有线程是共享该进程所具有的地址空间的,而每个线程都具有各自独立的栈,即线程栈。Windows线程栈的默认大小为1M, Linux的默认大小为8M。消耗线程栈空间的主要因素有函数调用以及局部变量占用。需要注意的是若定义的局部变量占用空间过大,或者函数递归层次过深,则可能会出现栈溢出的现象,即StackOverFlow。...原创 2020-04-01 21:54:44 · 1117 阅读 · 0 评论 -
一些实用优质的编程知识点总结
如下是工作学习中遇到的一些实用的知识点梳理,多来自网络转载,编程之路不易,与大家共勉。1,C语言换行的多种方式:https://blog.csdn.net/baiqishijkh/article/details/792362022,结构体成员的赋值的几种方式:http://www.imooc.com/wenda/detail/340567…后续待补充!...转载 2020-04-01 21:46:21 · 305 阅读 · 1 评论 -
多维数组的定义和声明
以三维数组为例:C++ 源文件中三维数组的定义以及赋初值int* cube[SIZE_A][SIZE_B][SIZE_C] = {NULL};头文件中三维数组的声明:extern int* cube[SIZE_A][SIZE_B][SIZE_C];需要注意的是:1,声明时不能赋初值;2,当其它文件包含对应有声明的头文件时,不需要在该文件进行再次声明;3,需要注意extern 与ex...原创 2020-04-01 21:32:07 · 848 阅读 · 0 评论 -
va_start用法&函数隐含形参"…"
做的一个C demo如下:#include “stdio.h”#include “stdarg.h”//必备//typedef char* va_list;//已在头文件中定义int demo(char *title, char *first,…)//用省略号表示函数剩余未列出的隐含形参{char *pStr = NULL;va_list argptr;//step 1:一个字符指针...原创 2020-03-28 20:09:01 · 624 阅读 · 0 评论 -
作为入参的出参指针
若实为入参,则是传入数据,此时一般为char *,即传入读取数据的地址若实为出参:1维指针,若已经为该地址申请内存或该指针指向一块可改写的内存区域,则一般为char *,传入欲写入数据的地址;2维指针,若没有为该地址申请内存,欲让被调用函数在内部进行内存申请而在外部内存释放,则必须传入指针的地址而不是指针指向的数据的地址,即char **简述:前者指针有可写入数据的地址,后者没有可写入数据...转载 2020-03-28 19:59:02 · 665 阅读 · 0 评论 -
长度为0的数组妙用
首先,长度为0的数组适用于对内存资源要求严格且数据结构繁多的场景。1,结构变量声明为指针类型,则指针本身占用4字节,且需要额外申请,额外释放。2,结构变量申请size为0的数组不占用内存,且可以保持内存连续,统一释放即可。例如:typedef struct{/结构头/HEADERUINT_32 x :1;UINT_32 y :1;UINT_32 z :30;UI...原创 2020-03-28 19:47:57 · 553 阅读 · 0 评论 -
内存的大端小端存储
只需要判断低地址存放的是高位数据(大端存储)还是低位数据(小段存储)。数据0x0A0B0C0D,地址0x1000,大端存储为不同的cpu处理内存数据的方式不同,以及cpu和网络处理数据的方式也可能不同,所以要指明大端还是小端。尤其是在做跨平台项目的时候。网络字节序,是和大端系统一致。也就是网络上传输任何数据的时候,采用大端系统一致的存放方法。因此X86系统上,都需要把网络序转换成主机序。...原创 2020-03-28 19:30:01 · 345 阅读 · 0 评论 -
C语言变量压缩
C语言中,可通过位操作,逻辑与或非运算来实现对变量占用空间的压缩;类似于通信标准中数据包格式的定义。原创 2020-03-28 19:21:47 · 152 阅读 · 0 评论 -
C指针强转
首先要理解C指针的含义:C语言中的一种用于存储地址的特殊的数据类型。在同一环境中“地址”的大小是固定的,一般为4字节。不同类型的指针是可以进行强制转换的,因为指向不同类型的指针存储的都只是一个地址,这种转换很少见。如:THIS_STRU *pThis;int *p;p = (int *)pThis;...原创 2019-04-16 21:31:04 · 354 阅读 · 0 评论 -
int a,int arr[]和int *p的区别
a是一个普通int变量的‘变量名’,&a是变量存储的地址,可直接通过变量名a访问变量值,改变变量值。arr是数组的‘数组名’,&arr为数组存储的地址,这是与普通变量的相似点,与普通变量区别是不可通过数组名直接访问数组(数组一般有多个元素),访问arr得到的还是数组的存放地址,即&arr = arr,通过arr可访问数组首元素(这一点与指针很相似),即arr = arr[...原创 2019-04-15 22:29:01 · 4411 阅读 · 0 评论 -
字符串与数组的关系
可以把字符串视为名称为字符串本身的数组通过验证:数组arr:&arr = arr = &arr[0]字符串:&“abc” = “abc” = &“abc”[0]原创 2019-04-15 22:31:13 · 861 阅读 · 0 评论 -
memset()的填充值
memset(ptr,ASCII码(可接收任意值),sizeof(arr));类型异常时不会返回错误指示,这也是该函数的弊端,对该类函数使用时需要特殊注意,尽量使用带‘_s’的安全函数。将任意输入值转换为ASCII码值,如果是字符串,则对应字符串返回值,即其地址的最后一个字节对应的ASCII码值,为数字则对应ASCII码值...原创 2019-04-15 22:39:16 · 387 阅读 · 0 评论 -
extern "C"
C++与C语言不同点之一在于C++具有重载的机制,而C语言没有,也就是说,这两种语言在对函数的识别上具有差异性;为了兼容早期C文件或团队中善于使用C文件的成员,C++文件允许通过添加extern "C"前缀方式在C++ 文件中放入C函数C语言中处理方式单纯,函数名称即为函数的唯一标识C++中由于重载的存在,函数名+返回值+参数决定了唯一的函数。造成的影响:当在CPP文件中extern C...原创 2019-04-15 22:44:01 · 199 阅读 · 0 评论 -
for循环首次不满足条件便退出
for (expr1; expr2; expr3){statement}第一个表示式只在循环开始前执行一次并且无条件执行。第二个表示式从第一次执行循环开始就在循环开始前运行做一次判断该表达式布尔值,是真就执行循环,是假就中断。如果第一次循环第二个表达式就是假,直接不执行for体。第三个表达式从第一次执行循环开始就在每次循环结束后执行一次。如:for(int i=0; i<4 &...原创 2019-04-15 22:48:23 · 14175 阅读 · 0 评论 -
Vector去重
#include ?sort(v.begin(),v.end());/unique()函数将重复的元素放到vector的尾部,然后返回指向第一个重复元素的迭代器,再用erase函数擦除从这个元素到最后元素的所有的元素/v.erase(unique(v.begin(), v.end()), v.end());...原创 2019-04-15 22:53:44 · 460 阅读 · 0 评论 -
函数名作为函数入参
函数的返回值是可以作为入参的,需要指定好入参函数的参数,不过这种写法不便于观看,一般情况不建议采用。原创 2019-04-15 22:58:06 · 1071 阅读 · 0 评论 -
函数缺省参数实现位置
声明是用户可以看到的部分,客户非常信任地使用这个特性,希望得到一定的结果,但是你在实现里使用了不同的缺省值,那么将是灾难性的。因此编译器禁止声明和定义时同时定义缺省参数值。类的成员函数的参数表在声明时缺省参数位于参数表右部,如int func(int a,int b=0,int c=5),但在它定义的时候则不能加默认参数,只能写int func(int a,int b,int c);若声明时没...原创 2019-04-16 21:04:29 · 419 阅读 · 0 评论 -
C文件基本操作
#include <stdio.h>指针定义:FILE *fp;打开文件:fp = fopen(“file path”, “W+”);文件操作:fprintf(fp, “value:%d”, val);文件关闭:fclose(fp);如文件写入:FILE *fp = fopen(“hello.c”, “w+”);fprintf(fp, “where is my god?\...原创 2019-04-16 21:08:25 · 206 阅读 · 0 评论 -
VS环境断点使用
VS环境下,断点对于程序的调试具有极大的作用,需要灵活掌握!普通断点:略,F9可以在定位点进行断点增删。数据断点:用于监控你所感兴趣的地址内容是否变化,断点触发后,再利用调用堆栈便可以定位到修改点,十分便利。函数断点:没怎么用过。断点设置:在断点的上面右键,可以进行条件或者触发次数等设置,在某些场景下(循环,条件)很有用。...原创 2019-04-16 21:17:47 · 882 阅读 · 0 评论 -
C语言关键字
共有32个,根据关键字的作用,可分其为数据类型关键字、控制语句关键字、存储类型关键字和其它关键字四类。1 数据类型关键字(12个):(1) char :声明字符型变量或函数(2) double :声明双精度变量或函数(3) enum :声明枚举类型(4) float:声明浮点型变量或函数(5) int: 声明整型变量或函数(6) long :声明长整型变量或函数(7) short ...原创 2019-04-15 22:19:31 · 113 阅读 · 0 评论