![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c语言
tianguiyuyu
这个作者很懒,什么都没留下…
展开
-
c语言register关键字----最快的关键字
register:这个关键字请求编译器尽可能的将变量存在CPU内部寄存器中,而不是通过内存寻址访问,以提高效率。注意是尽可能,不是绝对。你想想,一个CPU 的寄存器也就那么几个或几十个,你要是定义了很多很多register 变量,它累死也可能不能全部把这些变量放入寄存器吧,轮也可能轮不到你。 一、皇帝身边的小太监----寄存器 不知道什么是寄存器?那见过太监没有?没...原创 2019-11-08 11:50:02 · 263 阅读 · 0 评论 -
C语言函数库:动态链接库与静态链接库
首先,函数库就是一些事先写好的函数的集合,是别人分享的,我们可以拿来使用的。经过一些校准和整理,就形成一份标准化的函数库。例如glibc函数库有两种提供形式:动态链接库与静态链接库早起函数库里的函数都是直接共享的,就是所谓的开源社区。后来函数库商业化,就出现了静态链接库与动态链接库。他们是不直接给客户提供源代码,静态链接库是先将源代码只编译不连接形成.o文件,再用tar工具将.o文件归...原创 2019-11-05 12:34:55 · 1566 阅读 · 0 评论 -
清除和设置文件缓冲区,文件随机读写
清除和设置文件缓冲区 (1).清除文件缓冲区函数:int fflush(FILE *stream);int flushall(); fflush()函数将清除由stream指向的文件缓冲区里的内容,常用于写完一些数据后,立即用该函数清除缓冲区,以免误操作时,破坏原来的数据。flushall()将清除所有打开文件所对应的文件缓冲区。(2).设置文件缓冲区函数 void setbuf...原创 2019-11-04 23:15:34 · 360 阅读 · 1 评论 -
按照块的方式操作文件
按照块的方式操作文件,具体可以看如下代码:#define _CRT_SECURE_NO_WARNINGS #include <stdlib.h>#include <string.h>#include <stdio.h>//直接把内存数据 写入到 文件中typedef struct Teacher{ char name[64]; ...原创 2019-11-04 22:56:19 · 101 阅读 · 0 评论 -
读写文件中字符串的函数
char *fgets(char *string,int n,FILE *stream);char *gets(char *s);int fprintf(FILE *stream,char *format,variable-list);int fputs(char *string,FILE *stream);int fscanf(FILE *stream,char *format,...原创 2019-11-04 22:39:01 · 2170 阅读 · 0 评论 -
按照字符读写文件
(1).读写文件中字符的函数(一次只读写文件中的一个字符):int fgetc(FILE *stream);int fgetchar(void);int fputc(int ch,FILE *stream);int fputchar(int ch); int getc(FILE *stream); int putc(int ch,FILE *s...原创 2019-11-04 22:20:15 · 254 阅读 · 0 评论 -
c语言文件读写概念
6.1 c语言文件读写概念文件分类 按文件的逻辑结构: 记录文件:由具有一定结构的记录组成(定长和不定长) 流式文件:由一个个字符(字节)数据顺序组成 按存储介质: 普通文件:存储介质文件(磁盘、磁带等) 设备文件:非存储介质(键盘、显示器、打印机等) 按数据...原创 2019-11-04 21:57:41 · 1624 阅读 · 0 评论 -
结构体中的话题-偏移量
一旦结构体定义下来,则结构体中的成员,内存布局就定下来了。可以通过age地址,去求大的结构体的内存地址。代码如下:#define _CRT_SECURE_NO_WARNINGS #include <stdlib.h>#include <string.h>#include <stdio.h>//一旦结构体定义下来,则结构体中的成员..内存布...原创 2019-11-04 21:34:46 · 200 阅读 · 0 评论 -
结构体做函数参数,即结构体中套一级指针,结构体中套二级指针
直接上代码:#define _CRT_SECURE_NO_WARNINGS #include <stdlib.h>#include <string.h>#include <stdio.h>/*"name1111""name2222""name3333"*/typedef struct Teacher{ //char stu...原创 2019-11-04 11:05:54 · 178 阅读 · 0 评论 -
结构体做函数参数进阶
直接查看代码和相应的注释即可。#define _CRT_SECURE_NO_WARNINGS #include <stdlib.h>#include <string.h>#include <stdio.h>typedef struct Teacher{ char name[64]; char *alisname; int age ; ...原创 2019-11-04 10:11:57 · 73 阅读 · 0 评论 -
结构体做函数参数的例子demo
这段代码中,有一个注意的地方,scanf("%d",&(pArray[i].age)), 意思就是往这个地址中赋值。#define _CRT_SECURE_NO_WARNINGS #include <stdlib.h>#include <string.h>#include <stdio.h>typedef struct Teacher...原创 2019-11-04 10:01:16 · 140 阅读 · 0 评论 -
memset函数及其用法,C语言memset函数详解
在前面不止一次说过,定义变量时一定要进行初始化,尤其是数组和结构体这种占用内存大的数据结构。在使用数组的时候经常因为没有初始化而产生“烫烫烫烫烫烫”这样的野值,俗称“乱码”。每种类型的变量都有各自的初始化方法,memset() 函数可以说是初始化内存的“万能函数”,通常为新申请的内存进行初始化工作。它是直接操作内存空间,mem即“内存”(memory)的意思。该函数的原型为:# includ...原创 2019-10-22 21:57:50 · 624 阅读 · 0 评论 -
结构体变量定义和初始化的方式
定义结构体变量有三种方式:(1) 用结构体类型定义变量 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h>#include <stdlib.h>#include <string.h>struct Teacher { int age; char name[64];};...原创 2019-10-22 21:23:29 · 1588 阅读 · 0 评论 -
c语言中的字符数组自我结束标记
c语言中的字符数组结束标志。 NULL, 0, '\0' 其效果是一样的。int main(){ //定义数组指针的第一种类型 //char* array[] = { "aaa","bbb","ccc","ddd" ,'\0'}; //char* array[] = { "aaa","bbb","ccc","...原创 2019-10-22 20:38:54 · 2257 阅读 · 0 评论 -
c语言中,多维数组做函数参数退化的问题
在c语言中,多维数组做函数参数,会退化为指针。之所以可以退化,是因为数组在c语言中是线性存储的。具体看如下代码#include<stdio.h>void call(char* array[]){ int num = sizeof(array) / sizeof(*array); //二级指针array和一级指针*array是一样大小的,所以是1 printf...原创 2019-10-22 18:44:09 · 203 阅读 · 0 评论 -
多维数组做函数参数技术推演
C语言中只会以机械式的值拷贝的方式传递参数(实参把值传给形参) int fun(char a[20], size_t b) { printf("%d\t%d",b,sizeof(a)); } 原因1:高效 原因2: C语言处理a[n]的时候,它没有办法知道n是几,它只知道&n[0]是多少,它的...原创 2019-10-22 18:00:22 · 215 阅读 · 0 评论 -
c语言中,多维数组本质技术推演
多维数组char a[i][j]==》*(*(a+i)+j),代码·如下:void main222(){ int a[3][5]; int c[5]; //&c + 1; int b[10]; //b代表数组首元素的地址 &b代表这个数组的地址 &b+1相当于 指针后移4*10个单位 //a代表什么什么那?a是一个数组指针 指向低维数组的指针 //a...原创 2019-10-22 16:20:45 · 195 阅读 · 0 评论 -
数组指针类型
在c语言中,数组指针,就是一个指针,指向一个数组。定义数组指针有3种方式。 (1) 通过自定义数组类型来定义 typedef int(MYINT)[5]; MYINT *p; //定义数组指针的第一种类型, int a[5]; typedef int(MYINT)[5]...原创 2019-10-22 12:01:47 · 783 阅读 · 0 评论 -
c语言中的数组, 数组类型
c语言中的数组首元素的地址和数组的地址是两个不同的概念,比如一个数组, int a[]={10,100}, 数组名a代表数组首元素的地址,&a代表数组的地址,数组地址&a用数组首元素的地址来代替,因此printf("%d\n",a)与printf("%d\n",&a)是相等的,但是a+1与&a+1是不相等的,比如如果a代表2,那么a+1就是6,&...原创 2019-10-22 10:56:02 · 1859 阅读 · 0 评论 -
二级指针内存模型
二级指针内存模型,注意看下面的交换指针和交换内存块的区别,代码如下:释放内存代码如下:原创 2019-10-19 12:06:08 · 83 阅读 · 0 评论 -
c语言中的const专题
在c语言中,必须要有这么一个概念,指针变量与指针所指向的内存空间是两个不同的值(1) 常整形数 const int a; //int const b; 这两个意思是一样的,代表一个常整形数(2) const char * p 代表一个指向常整形数的指针,指针的指向可以改变,但是这个内存空间所存储的数据不可以改变(3) char * co...原创 2019-10-19 12:01:34 · 135 阅读 · 0 评论 -
一级指针(char *)易错模型分析
(1) char *(字符串)做函数参数出错模型分析比如代码如下:void copy_str21(char *from, char *to){ if (*NULL = '\0' || *to!=’\0’) //红色的地方会出错,因为别人可能将null传给from指针 { Printf(“func copy_str21() err\n”); return; ...原创 2019-10-19 11:45:14 · 212 阅读 · 0 评论 -
字符串相关一级指针内存模型
先写代码,如下:void main(){ char buf[20]= "aaaa"; char buf2[] = "bbbb"; char *p1 = "111111"; char *p2 = malloc(100); strcpy(p2, "3333"); system("pause"); return ;}这段代码的内存示意图如下:看到代码,脑子中一定要有...原创 2019-10-19 11:24:50 · 99 阅读 · 0 评论 -
c语言中栈和数组buf的生长方向
对于c语言中,栈是向上还是向下生长,一般由操作系统决定。一般是栈是向下生长,因为一旦是向下生长,最高地址确定之后,就不会发生溢出。但是不管是栈是向下生长还是向上生长,buf的生长的方向都是向上的,buf是数组首元素的地址,其是一个常量,是不能改变的,即不能执行buf++,但是可以执行buf+i (前提是buf是一个数组)。具体示意图如下:...原创 2019-10-19 11:18:20 · 588 阅读 · 1 评论 -
c语言中的内存4区域模型(堆,栈,全局区,代码区)
理解c语言的4个内存区域模型,对于学习好c语言是十分重要的。c语言的内存4区域模型如下:原创 2019-10-19 11:10:04 · 359 阅读 · 0 评论 -
c语言中的void类型解析
数据类型的封装1、void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。 2、用法1:数据类型的封装 int InitHardEnv(void **handle); 典型的如内存操作函数memcpy和memset的函数原型分别为 void * memcpy(voi...原创 2019-10-19 10:59:41 · 8435 阅读 · 2 评论 -
c语言数据类型本质及其分析
c语言的数据类型如下:数据类型的本质是固定内存大小区域的别名。数据类型的作用是编译器预算对象(变量)的内存大小,从而为其分配。求数据类型的大小可以用sizeof(int)。数据类型的别名可以用typedef来自定义别名。...原创 2019-10-19 10:57:00 · 427 阅读 · 0 评论 -
c/c++中动态内存分配与回收与从void*类型隐式转换为int*类型
最常见的差异之一是,C允许从void*隐式转换到其它的指针类型,但C++不允许。下列是有效的C代码。从void*类型隐式转换为int*类型,但要使其在C和C++两者皆能运作,就需要使用显式转换。c语言版本的:#include <stdio.h>#include <stdlib.h>#define high 2#define row 3#defin...原创 2019-10-19 10:39:19 · 825 阅读 · 0 评论