C语言
文章平均质量分 58
C
NGC_2070
纸上得来终觉浅,绝知此事要躬行!
展开
-
文件的打开方式[转]
参考:http://c.biancheng.net/view/311.html 在 UNIX/Linux 平台中,用文本方式或二进制方式打开文件没有任何区别。 在 UNIX/Linux 平台中,文本文件以\n(ASCII 码为 0x0a)作为换行符号;而在 Windows 平台中,文本文件以连在一起的\r\n(\r的 ASCII 码是 0x0d)作为换行符号。 在 Windows 平台中,如果以文本方式打开文件,当读取文件时,系统会将文件中所有的\r\n转换成一个字符\n,如果文件中有连续的两个字..转载 2021-08-14 13:39:49 · 119 阅读 · 0 评论 -
C/C++函数调用约定[转]
C/C++函数调用约定[转]原文链接:《C/C++函数调用约定》 参考1:https://www.jianshu.com/p/47d80d34e5ee 参考2:《C语言22 调用约定和函数指针》 参考3:《调用约定与符号名》 关于 C/C++ 函数调用约定,大多数时候并不会影响 程序逻辑,但遇到跨语言编程时,了解一下还是有好处的。 函数调用约定就是告诉编译器:怎么传递参数,怎么传递返回值,怎么平衡堆栈。 VC 中默认调用是 __cdecl 方式,Windows API .转载 2021-07-06 13:54:28 · 120 阅读 · 0 评论 -
在指定路径下创建以时间为目录的文件夹
在指定路径下创建以时间为目录的文件夹#include <time.h>#include <direct.h> //创建文件夹#include <io.h>#include <string>//创建以当前时间为名称的目录std::string strFolder = "xxx\\xx\xx";time_t timep;time(&timep);char tmp[256];memset(tmp, 0, 256);st原创 2021-05-12 14:49:22 · 508 阅读 · 0 评论 -
字符串常用函数及操作(2)[转]
字符串常用函数及操作(2)[转]目录字符串常用函数及操作(2)[转]strlen()strcpy()strncpy()strcat()strncat()strcmp()strncmp()sprintf()sscanf()strchr()strstr()strtok()atoi()strlen()#include <string.h>size_t strlen(const char *s);功能:计算指定指定.转载 2021-04-01 21:00:52 · 77 阅读 · 0 评论 -
字符串常用函数及操作(1)
目录strcpystrlen关键字 sizeofmemmove去掉字符串左右两端的空格strcpychar * strcpy( char * dst, const char * src );strcpy是一种C语言的标准库函数,strcpy把从src地址开始且含有’\0’结束符的字符串复制到以dest开始的地址空间,返回值的类型为char*。 返回值:目标串的地址。char* strcpy(char* des,const char* source){ cha.原创 2021-03-15 20:50:53 · 114 阅读 · 0 评论 -
LinuxC中全局变量environ[转]
LinuxC中全局变量environ[转]【原文:】《LinuxC中全局变量environ》 http://t.zoukankan.com/qingergege-p-6495475.htmlLinux C中environ 变量是一个char** 类型,存储着系统的环境变量。 要想遍历环境变量可以用下面这个程序:#include <stdio.h>extern char ** environ;int main(){ char ** envir = environ;转载 2021-03-15 20:38:03 · 700 阅读 · 0 评论 -
CString解析[转]
CString解析[转]标准c++里的字符串类是string,在microsoft MFC类库中使用的是CString类。通过字符串类,可以大大的避免c中的关于字符串指针的那些问题。 MFC里的关于CString的类的实现大部分在strcore.cpp中。 CString就是对一个用来存放字符串的缓冲区和对施加于这个字符串的操作封装。 CString里需要有一个用来存放字符串的缓冲区,并且有一个指针指向该缓冲区,该指针就是LPTSTR m_pchData。 但是有些字符串操作会增建或减少字.转载 2020-12-20 02:11:46 · 716 阅读 · 0 评论 -
assert的使用 [转]
原文:《C语言C++中assert的用法》 作者:C语言与C++编程目录断言assert原型断言assert使用示例断言assert使用规则断言assert原型void assert(int expression);assert宏的原型定义在<assert.h>中【作用】先计算表达式expression的值为假(即为0),那么它就先向stderr打印一条出错信息,然后通过调用abort来终止程序。【缺点】频繁的调用会极大的影响程序的性能,增加额..转载 2020-11-30 17:35:26 · 218 阅读 · 0 评论 -
C语言中的函数指针 [转]
原文:《还搞不懂C语言中的函数指针?看完你就明白了》 作者:linux亦有归途目录函数指针的定义函数指针使用的例子*(int*)&p ----这是什么?(*(void(*) ())0)()------这是什么?函数指针数组函数指针数组的指针函数指针的定义顾名思义,函数指针就是函数的指针。它是一个指针,指向一个函数。看例子:A) char * (*fun1)(char * p1,char * p2); B) char * *fun2(char * p..转载 2020-11-30 19:56:56 · 112 阅读 · 0 评论 -
函数指针与指针函数 [转]
原文:《C/C++函数指针与指针函数》作者:C语言与C++编程目录什么是指针?什么是函数指针?函数指针的用法让程序跳转到绝对地址为0x0113F90C什么是指针函数?函数指针与指针函数区别什么是指针?定义:指针是程序数据在内存中的地址,而指针变量是用来保存这些地址的变量;上面一个 4GB 的内存可以存放 2^32 字节的数据。 左侧连续的十六进制编号就是内存地址,每个内存地址对应一个字节的内存空间。而指针变量保存的就是这个编号,也即内存地址。 【指针的声转载 2020-11-30 19:14:48 · 166 阅读 · 0 评论 -
Linux string.c源文件 [转]
Linux string.c注:了解各字符串函数的实现及技巧// SPDX-License-Identifier: GPL-2.0/* * linux/lib/string.c * * Copyright (C) 1991, 1992 Linus Torvalds *//* * stupid library routines.. The optimized versions should generally be found * as inline code in <转载 2020-11-22 09:43:36 · 445 阅读 · 0 评论 -
指针使用的总结 -- 让你不再害怕指针[转]
本文参考《让你不再害怕指针》目录前言:复杂类型说明细说指针指针的算术运算运算符&和*指针表达式数组和指针的关系指针和结构类型的关系指针和函数的关系指针类型转换指针的安全问题前言:复杂类型说明要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要理解复杂类型其实很简单,一个类型里会出现很多运算符,他们也像普通的表达式一样,有优先级,其优先级和运算优先级一样,所以我总结了一下其原则: 从变量名处起,根据..转载 2020-11-22 01:05:19 · 318 阅读 · 0 评论 -
C语言常用标准库 [转]
[声明] 参考文章链接:C语言常用标准库解读目录C语言常用标准库标准定义()错误信息()输入输出函数()数学函数()字符处理函数()字符串函数()字符串函数存储区操作功能函数()随机数函数动态存储分配函数几个整数函数数值转换执行控制与执行环境交互常用函数bsearch和qsortC语言常用标准库标准头文件包括:<asset.h> <ctype.h> <errno.h> ..转载 2020-11-19 23:52:17 · 242 阅读 · 0 评论 -
C指针之二维数组的运算和指针
二维数组的运算和指针指针指向二维数组的数组名二维数组的数组名表示二维数组的第一维数组中首元素(也就是第二维的数组)的首地址 二维数组的数组名a等同于&a[0],这个和一维数组的符号含义是相符的。 用数组指针来指向二维数组的数组名是类型匹配的。int a[2][5] = {{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}};printf("a[1][3] = %d.\n", a[1][3]);printf("a[1][3] = %d.\n", *(*(a+原创 2020-06-16 15:27:13 · 663 阅读 · 0 评论 -
C指针之二维数组
二维数组二维数组的内存映像一维数组在内存中是连续分布的多个内存单元组成的,而二维数组在内存中也是连续分布的多个内存单元组成的。从内存角度来看,一维数组和二维数组没有本质差别。 二维数组int a[2][5]和一维数组int b[10]其实没有任何本质差别。我们可以把两者的同一单元的对应关系写下来。 a[0][0] a[0][1] a[0][4] a[1][0] a[1][1] a[1][4] b[0] b[1] ...原创 2020-06-16 14:18:29 · 1197 阅读 · 0 评论 -
C指针之二重指针
二重指针二重指针与普通一重指针的区别 本质上来说,二重指针和一重指针的本质都是指针变量,指针变量的本质就是变量。 一重指针变量和二重指针变量本身都占4字节内存空间 char a;char **p1; // 二重指针char *p2; // 一重指针printf("sizeof(p1) = %d.\n", sizeof(p1));printf("sizeof(p2) = %d.\n", sizeof(p2));p2 = &a;//p1 = &a; //原创 2020-06-16 12:26:45 · 409 阅读 · 0 评论 -
C指针之再论typedef
再论typedefC语言的2种类型:内建类型与用户自定义类型 内建类型ADT、自定义类型UDT typedef定义(或者叫重命名)类型而不是变量 类型是一个数据模板,变量是一个实在的数据。类型是不占内存的,而变量是占内存的。 面向对象的语言中:类型就是类class,变量就是对象。 typedef与#define宏的区别 typedef char *pChar; #define pChar char * typedef与结构体 结构体在使用时都是先定义结构体类型,再用原创 2020-06-16 11:22:34 · 162 阅读 · 0 评论 -
C指针之函数应用案例(内核分层架构思想)
函数指针应用案例 案例1 #include <stdio.h>int add(int a, int b);int sub(int a, int b);int multiply(int a, int b);int divide(int a, int b);// 定义了一个类型pFunc,这个函数指针类型指向一种特定参数列表和返回值的函数typedef int (*pFunc)(int, int);int main(void){ pFunc p1 = NULL;原创 2020-06-16 10:39:27 · 338 阅读 · 0 评论 -
C指针之函数指针与typedef
函数指针与typedef函数指针的实质(还是指针变量)函数指针的实质还是指针,还是指针变量。 本身占4字节(在32位系统中,所有的指针都是4字节) 函数指针、数组指针、普通指针之间并没有本质区别,区别在于指针指向的东西是个什么玩意。 函数的实质是一段代码,这一段代码在内存中是连续分布的(一个函数的大括号括起来的所有语句将来编译出来生成的可执行程序是连续的) 所以对于函数来说很关键的就是函数中的第一句代码的地址,这个地址就是所谓的函数地址,在C语言中用函数名这个符号来表示。 结合原创 2020-06-15 21:10:48 · 275 阅读 · 0 评论 -
C指针之指针数组与数组指针
指针数组与数组指针字面意思来理解指针数组与数组指针 指针数组的实质是一个数组,这个数组中存储的内容全部是指针变量。 数组指针的实质是一个指针,这个指针指向的是一个数组。 分析指针数组与数组指针的表达式int *p[5]; int (*p)[5]; int *(p[5]); 一般规律: int *p; (p是一个指针); int p[5]; (p是一个数组) 总结...原创 2020-06-15 18:43:36 · 132 阅读 · 0 评论 -
C指针之输入型参数与输出型参数
输入型参数与输出型参数函数为什么需要形参与返回值函数名是一个符号,表示整个函数代码段的首地址,实质是一个指针常量,所以在程序中使用到函数名时都是当地址用的,用来调用这个函数的。 函数体是函数的关键,由一对{}括起来,包含很多句代码,函数体就是函数实际做的工作。 形参列表和返回值。 形参是函数的输入部分,返回值是函数的输出部分。 对函数最好的理解就是把函数看成是一个加工机器(程序其实就是数据加工器),形参列表就是这个机器的原材料输入端;而返回值就是机器的成品输出端。 其实如果没有形参原创 2020-06-15 14:30:00 · 1030 阅读 · 0 评论 -
C指针之指针与函数传参
指针与函数传参普通变量作为函数形参函数传参时,普通变量作为参数时,形参和实参名字可以相同也可以不同,实际上都是用实参来替代相对应的形参的。 在子函数内部,形参的值等于实参。原因是函数调用时把实参的值赋值给了形参。 这就是很多书上写的“传值调用”(相当于实参做右值,形参做左值)/ &a和&b不同,说明a和b不是同一个变量(在内存中a和b是独立的2个内存空间)// 但是a和b是有关联的,实际上b是a赋值得到的。void func1(int b){ // 在函数内部,形参b原创 2020-06-15 13:46:08 · 266 阅读 · 0 评论 -
C指针之指针、数组与sizeof运算符
指针、数组与sizeof运算符sizeof是C语言的一个运算符 主要sizeof不是函数,虽然用法很像函数,sizeof的作用是用来返回()里面的变量或者数据类型占用的内存字节数。 sizeof存在的价值 主要是因为在不同平台下各种数据类型所占的内存字节数不尽相同(譬如int在32位系统中为4字节,在16位系统中为2字节···)。 所以程序中需要使用sizeof来判断当前变量/数据类型在当前环境下占几个字节。 char str[] = ”hello”; sizeof(str)...原创 2020-06-14 13:42:31 · 798 阅读 · 0 评论 -
C指针之指针与强制类型转换
指针与强制类型转换变量的数据类型的含义所有的类型的数据存储在内存中,都是按照二进制格式存储的。 所以内存中只知道有0和1,不知道是int的、还是float的还是其他类型。 int a = 5;printf("a = %d.\n", a); // 5printf("a = %f.\n", a); // 一个很奇葩的数字,一看就知道是乱码int、char、short等属于整型,他们的存储方式(数转换成二进制往内存中放的方式)是相同的,只是内存格子大小不同(所以这几种整型就彼此.原创 2020-06-14 11:21:15 · 1277 阅读 · 0 评论 -
C指针之指针与数组的天生姻缘
指针与数组的天生姻缘以指针方式来访问数组元素数组元素使用时不能整体访问,只能单个访问。访问方式有2种:数组形式和指针形式。 数组格式访问数组元素是: 数组名[下标]; (注意下标从0开始) 指针格式访问数组元素是: *(指针+偏移量); 如果指针是数组首元素地址(a或者&a[0]),那么偏移量就是下标; 指针也可以不是首元素地址而是其他哪个元素的地址,这时候偏移量就要考虑叠加了。 数组下标方式和指针方式均可以访问数组元素,两者的实质其实是一样的。 在编译器.原创 2020-06-14 10:24:50 · 121 阅读 · 0 评论 -
C指针之深入学习一下数组
深入学习一下数组从编译器角度来理解数组从编译器角度来讲,数组变量也是变量,和普通变量和指针变量并没有本质不同。 变量的本质就是一个地址,这个地址在编译器中决定具体数值,具体数值和变量名绑定,变量类型决定这个地址的延续长度。 搞清楚:变量、变量名、变量类型这三个概念的具体含义,很多问题都清楚了。 地址(变量名)只是一个点,没有长度,默认一个字节 int a; 从a开始,连续四个字节分配给变量a char a;从a开始,分配一个字节 从内存角度来理解数组从内存角度讲,数组..原创 2020-06-13 11:07:42 · 132 阅读 · 0 评论 -
C指针之const关键字与指针
const关键字与指针const修饰指针的4种形式const关键字,在C语言中用来修饰变量,表示这个变量是常量。 const修饰指针有4种形式,区分清楚这4种即可全部理解const和指针。 第一种:const int *p; 第二种:int const *p; 第三种:int * const p; 第四种:const int * const p; // 第一种const int *p1; // p本身不是cosnt的,而p指向的变量是const的// 第二种int c原创 2020-06-13 10:10:51 · 210 阅读 · 0 评论 -
C指针之野指针
野指针神马是野指针?哪里来的?有什么危害?(1)野指针,就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的) (2)野指针很可能触发运行时段错误(Sgmentation fault) (3)因为指针变量在定义时如果未初始化,值也是随机的。指针变量的值其实就是别的变量(指针所指向的那个变量)的地址,所以意味着这个指针指向了一个地址是不确定的变量,这时候去解引用就是去访问这个地址不确定的变量,所以结果是不可知的。int *p; // 局部变量,分配在栈上,栈反复被使用,.原创 2020-06-12 11:00:36 · 222 阅读 · 0 评论 -
C指针之指针带来的一些符号的理解
指针带来的一些符号的理解我们写的代码是给编译器看的,代码要想达到你想象的结果,就必要编译器对你的代码的理解和你自己对代码的理解一样。编译器理解代码就是理解的符号,所以我们要正确理解C语言中的符号,才能像编译器一样思考程序、理解代码。星号*(1)C语言中*可以表示乘号,也可以表示指针符号。这两个用法是毫无关联的,只是恰好用了同一个符号而已。 (2)星号在用于指针相关功能的时候有2种用法: 第一种是指针定义时,*结合前面的类型用于表明要定义的指针的类型; 第二种功能是指针解引用,解引用时.原创 2020-06-12 10:19:16 · 1221 阅读 · 0 评论 -
C指针之指针到底是什么?
指针到底是什么?指针到底是什么? 首先必须非常明确:指针的实质就是个变量,它跟普通变量没有任何本质区别。 指针完整的名字应该叫指针变量,简称为指针 告诉编译器,这个变量用途或者说实质意义。 // a的实质其实就是一个编译器中的符号,在编译器中a和一个内存空间联系起来// 这个内存空间就是a所代表的那个变量。int a; // 定义了int型变量,名字叫aint *p; // 定义了一个指针变量,名字叫p,p指向一个int型变量a = 4; ...原创 2020-06-11 19:43:13 · 373 阅读 · 0 评论 -
C typedef 看完这篇就够了
原文链接:为什么很多人编程喜欢用typedef?typedef 的基本使用typedef与结构体的结合使用typedef 是 C 语言的一个关键字,用来给某个类型起个别名,也就是给C语言中已经存在的一个类型起一个新名字。大家在阅读代码的过程中,会经常见到 typedef 与结构体、联合体、枚举、函数指针声明结合使用。比如下面结构体类型的声明和使用:struct student{ char name[20]; int age; float score;};struct转载 2020-05-28 14:54:27 · 341 阅读 · 0 评论