C语言
长弓的坚持
这个作者很懒,什么都没留下…
展开
-
C语言二进制方式读写文件数据
fwrite(buffer, size, count,fp):以二进制的形式向指定的文件中写入若干数据项(由count决定),返回实际写入的数据项数目,各参数含义如下:buffer:一个存储区的起始地址,以该地址开始的存储区的数据即是保存到文件中的数据,可以是数组或指针类型;size:单个数据项的大小(单位:字节);count:数据项数量;fp:FILE类型指针,该指针对应的文件即是数据保存的“目的地”; #include <stdio.h> #incl.转载 2020-08-08 17:39:03 · 7289 阅读 · 0 评论 -
将十进制数转化成二进制数,计算其中1的个数
以下是我学到的三种方法,如果大家还有更好的方法,可以讨论交流。首先,我们得知道十进制怎样转化成二进制,如下图。得到10的二进制数为1010那么我们会发现,10%2是判断二进制数的最后一位是0还是1,判断完成后向右移一位即10/2得到5,接着5%2判断二进制数的倒数第二位是0还是1,判断完成后向右移一位即5/2得2,重复这个过程,直到0/2结束。最终我们得到了10的二进制数1010.根据上述思想,我们可以得到一个最初步的算法。 while(data>0) {.转载 2020-08-02 21:04:14 · 2798 阅读 · 0 评论 -
C语言中 #pragma pack()
#pragma pack 这条指令主要用作改变编译器的默认对齐方式。pragma pack(show) //显示当前内存对齐的字节数,编辑器默认8字节对齐 #pragma pack(n) //设置编辑器按照n个字节对齐,n可以取值1,2,4,8,16 #pragma pack(push) //将当前的对齐字节...转载 2020-03-01 18:04:51 · 9755 阅读 · 0 评论 -
C语言数据类型:联合(union)
1. 联合说明和联合变量定义 联合也是一种新的数据类型, 它是一种特殊形式的变量。 联合说明和联合变量定义与结构十分相似。其形式为: union 联合名{ 数据类型 成员名; 数据类型 成员名; ... } 联合变量名; 联合表示几个变量公用一个内存位置, 在不同的时间保存不同的数据类型和不同...转载 2020-03-01 17:55:41 · 3422 阅读 · 1 评论 -
fwrite ,fprintf的作用与区别
scanf和fpintf是一对,用fprintf写的必须用fscanf来读。fread和fwrite是一对,用fwrite写的必须用fread来读。同样的数据,使用fprintf和fwrite写下去的是不一样的,但是使用其相应的读命令读上来的数据会是一样的。fwrite是将数据不经转换直接以二进制的形式写入文件,而fprintf是将数据转换为字符后再写入文件。文件格式:文本文...转载 2019-11-16 10:57:49 · 2492 阅读 · 0 评论 -
理解int的存储方式以及VS二进制编辑器的使用
此文先讲int数据的存储(大小端)问题,然后简单讲一下二进制编辑器的使用,针对像我一样的初学者,懂了的大神可以直接关掉 直接说结论,大家都知道一个int数据是4字节,一个字节是8个比特位,也就是一个int类型占了4*8=32个比特位,这也就是int类型范围的由来。一个内存地址对应的空间就是一个字节,一个int数据会对应四块连续的内存空间,接下来用数字1来说明,要存储int类型数...转载 2019-11-16 10:41:33 · 736 阅读 · 0 评论 -
C语言位运算符
对于更多紧凑的数据,C 程序可以用独立的位或多个组合在一起的位来存储信息。文件访问许可就是一个常见的应用案例。位运算符允许对一个字节或更大的数据单位中独立的位做处理:可以清除、设定,或者倒置任何位或多个位。也可以将一个整数的位模式(bit pattern)向右或向左移动。整数类型的位模式由一队按位置从右到左编号的位组成,位置编号从 0 开始,这是最低有效位(least significant b...转载 2019-10-19 17:42:11 · 486 阅读 · 0 评论 -
程序内存区域分配(五个段)--终于搞明白了
在学习之前我们先看看ELF文件。ELF分为三种类型:.o 可重定位文件(relocalble file),可执行文件以及共享库(shared library),三种格式基本上从结构上是一样的,只是具体到每一个结构不同。下面我们就从整体上看看这3种格式从文件内容上存储的方式,spec上有张图是比较经典的:如上图:其实从文件存储的格式来说,上面的两种view实际上是一样的,Segment实际上...转载 2019-10-19 17:35:19 · 5532 阅读 · 0 评论 -
如何混合编译C语言和C++
如何混合编译C语言和C++ 实际开发过程中,C++中会调用C与语言编写的代码,我在网络上面找到一篇写得很好的文章 http://blog.csdn.net/keensword/article/details/401114 就着上面的例子,我使用C语言采用两种方法重写了一下。 方法一、全局函数和变量在devVar.c文件中实现,在extern.cpp文件中使用ex...转载 2019-09-01 21:43:50 · 1851 阅读 · 0 评论 -
C语言中结构体的位域(bit-fields)
有些数据在存储时并不需要占用一个完整的字节,只需要占用一个或几个二进制位即可。例如开关只有通电和断电两种状态,用 0 和 1 表示足以,也就是用一个二进位。正是基于这种考虑,C语言又提供了一种叫做位域的数据结构。在结构体定义时,我们可以指定某个成员变量所占用的二进制位数(Bit),这就是位域。请看下面的例子:struct bs{ unsigned m; unsigned n: ...转载 2019-05-11 14:21:18 · 13155 阅读 · 2 评论 -
如何解决C/C++中stack overflow问题
一般遇到这个问题,有两个常见的情况,一个是存在函数的递归调用,另一个是函数中定义了一个较大的数组或者别的变量。 1、在函数的递归调用中,函数中定义的局部变量所占的空间要直到递归结束才能被释放,这样函数不停的递归,堆栈早晚会被用完,解决这一问题的办法是在递归函数中每次动态的分配变量的内存,在使用结束的时候释放内存。遇到这种情况更改堆栈的最大空间大小是没有用的,要从代码的优化入手。下面以二维数组的动...转载 2018-12-28 13:21:50 · 19291 阅读 · 0 评论 -
C语言指针高级部分:void指针和数据指针
概念 void指针 数据指针void指针void指针的基本概念void的意思就是“无类型”,void指针则为“无类型指针”,void指针可以指向任何类型的数据。所以void指针一般被称为通用指针或者泛指针,或者叫做万能指针void的意思就是“无类型”,void指针则为“无类型指针”,void指针可以指向任何类型的数据。所以void指针一般被称为通用指针或者泛...转载 2018-12-09 21:21:11 · 1341 阅读 · 0 评论 -
指针的定义和使用
1.指针是变量,但是指针的字节长度是固定的。因为指针保存的是地址,由操作系统的位数决定,32位机的字节是4,64位机的字节是8。2.指针指向的内存空间和对应的内存空间我在这里定义了一个整型指针p保存num的地址(0x1000),num的地址就是首字节的地址,而指针p本身的地址为0x2000。下面我们来引入指针的定义:num对应的内存空间为5,指针p对应的内存空间为0x1000,指针...转载 2018-12-09 21:13:23 · 10982 阅读 · 0 评论 -
条件编译#ifdef的妙用详解
本文主要介绍c语言中条件编译相关的预编译指令,包括 #define、#undef、#ifdef、#ifndef、#if、#elif、#else、#endif、defined。#define 定义一个预处理宏#undef 取消宏的定义#if 编译预处理中的条件命令,相当于C语法中的if语句#ifdef ...转载 2018-12-09 21:08:39 · 117039 阅读 · 5 评论 -
C语言中文件的读取
http://blog.csdn.net/gzshun/article/details/7081736/http://baike.baidu.com/link?url=Aa2QF3o5IkrnE89HfL82UFDaca3uaBqEJdmorh4D8whVtdnFGZnouourXEOgigW9McGoK3s1CmZqxh8936hwN_ C语言函数s转载 2016-09-19 00:19:57 · 559 阅读 · 0 评论 -
vs2008、vs2010、vs2012中查看变量在内存中的内容的方法
在vs中调试程序的,有时候需要设置断点看某个变量的内容,如果变量是一个指针、数组或结构体,则可以通过查看该变量所指向的内存来看变量的内容。1、在vs2008中打开内存窗口在vs2008调试界面中,点击菜单【调试】->【窗口】->【内存】->【内存1】/【内存2】/【内存3】/【内存4】即可打开内存窗口。2、找到要查看的变量的内存地址在VS调试界面中,右键点击要查看内转载 2018-02-04 22:48:43 · 1937 阅读 · 0 评论 -
结构体为什么要4字节对齐
sizeof与struct——求结构体大小的计算方法sizeof浅析(一)——求结构体大小 这篇文章讲了sizeof求结构体大小的计算方法,并给出可以套用的准则:一、存储变量时地址要求对齐,编译器在编译程序时会遵循两条原则: (1)结构体变量中成员的偏移量必须是成员大小的整数倍(0被认为是任何数的整数倍) (2)结构体大小必须是所有成员大小的整数倍,也即所有成员大小的公倍数。二、 对于嵌套...转载 2018-04-09 13:10:57 · 4109 阅读 · 5 评论 -
C/C++结构体四字节数据对齐
为了避免混淆,做如下规定,以下代码若不加特殊说明都运行于32位平台,结构体的默认对齐值是8,各数据类型所占字节数分别为char占一个字节int占四个字节double占八个字节。两个例子请问下面的结构体大小是多少?struct Test{ char c ; int i ;};这个呢?struct Test1{ int i ; double d ; cha...转载 2018-04-09 13:12:33 · 1386 阅读 · 0 评论 -
memcpy-结构体的复制
一、典型例子一个memcpy的结构体的复制,类似于C++中调用类的拷贝构造函数,用一个对象去初始化另一个对象!#include "stdio.h"#include "string.h"void main(void){struct s1{ char *name; int age;}stu1={"wangqiao",24};struct s1 s2;memcpy...转载 2018-10-27 13:10:35 · 33985 阅读 · 1 评论 -
为什么不能够用unsigned 修饰 float和double
最近犯了一个错误:定义变量类型的时候竟然定义了unsigned double的类型。由于编译能够通过,因此一直没有发现这样写会有什么样的问题。今天一次偶然的测试中发现这些变量的值都是整数。一开始觉得奇怪,明明是浮点数,怎么变成整型了? 后来上网查了一下资料:原来浮点数是不能用 unsigned来规范的。unsigned 的意思就是把内存中的数据第一位也用来表示数据,而不用于表示...转载 2018-11-17 22:49:14 · 23976 阅读 · 6 评论 -
数组名和指针的区别
1. 己址数组和指针,都是有自己的地址的。在代码中,你可以用取地址运算符“&”来取得。程序中是:printf("%x %x\n", &pInt, &arr);2. 己值数组和指针,都是有自己的数据值的。程序中,数组arr的数据值,是arr[0]的地址;而对于指针pInt,通过pInt = arr;之后,pInt的数据值也是arr[0]的地址。但是...转载 2018-12-14 13:09:19 · 193 阅读 · 0 评论 -
数组、结构体的初始化
一直以来,初始化变量和数组常采用定义时赋值的方法,今天在定义一个结构体的时候发现了一些问题,查了下相关资料发现以往的使用确实有些误区,一直没有注意到,于是搜集了下零散的资料在此记录一下。 一、以往常用的初始化方式:1 int a=0; /*a初始化为0*/2 int b[10]={0}; /*b中全部元素初始化为0*/想必一直这样使用也确实不会发现问题...转载 2018-12-14 13:13:58 · 8983 阅读 · 0 评论 -
static作用(修饰函数、局部变量、全局变量)
C语言:static作用(修饰函数、局部变量、全局变量)一、 static全局变量与普通的全局变量有什么区别 ?全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。 全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。 这两者的区别在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变...转载 2018-12-09 20:52:50 · 60276 阅读 · 9 评论 -
C语言中static全局变量与普通的全局变量区别
下面是中兴通讯2012校招笔试题的一道问答题:1. static全局变量与普通的全局变量有什么区别 ? 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。 全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。 这两者的区别在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变...转载 2018-12-09 20:54:05 · 18219 阅读 · 1 评论 -
break, continue, goto, return语句详解
关于break,continue,goto,return语句区别详解(所有语言通用的语法知识)一、break 1. break语句形式: break; 2. break语句功能: A. switch语句中,break语句会终止其后语句的执行,退出switch语句。 B. 使一个循环立即结束,也就是说在循环中遇到break语句时,循环立即终止,转载 2016-09-19 00:14:06 · 821 阅读 · 0 评论