C
文章平均质量分 53
4559
这个作者很懒,什么都没留下…
展开
-
数据的类型和字节数
在32位的编译器下类型 字节char 1 short 2int 4long 4long long 8float 4double 8long double 16...原创 2018-04-22 12:16:38 · 210 阅读 · 0 评论 -
链表实现一个通讯录
2.实现一个通讯录;通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址提供方法:1. 添加联系人信息2. 删除指定联系人信息3. 查找指定联系人信息4. 修改指定联系人信息5. 显示所有联系人信息6. 清空所有联系人7. 以名字排序所有联系人完整代码请滑到页尾1. 添加联系人信息函数思路:判断当前从主函数过来的结构体指针是否为空,为空就为它开辟一块空间,然后给这块...原创 2018-05-26 02:05:43 · 1976 阅读 · 4 评论 -
C语言实现复制一个文件内容到另一个文件里
首先你的创建两个txt文件或者其他文件也行,然后在第一个文件中写一些内容 第二个文件中不用写我的两个文件是test1.txt test2.txt 执行程序后test1.txt的内容被复制到test2.txt#include<stdio.h>int main(){ char ch; FILE* pfr = fopen("C:\\Users\\ljh\\Deskto...原创 2018-06-02 20:47:54 · 35729 阅读 · 8 评论 -
内存管理小结
栈区(可读可写):由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 例:int main(){ char a;//局部变量,在栈中 char *p;//局部变量,在栈中 return 0;}堆区间(可读可写):在运行的时候调用程序(如C中的malloc或C++中的new)分配内存,可以在任何时候决定分配内存及分配的大小,用户自己负...原创 2018-05-30 09:46:27 · 191 阅读 · 0 评论 -
结构体的内存大小怎么算
前言:想通俗的讲解一下结构体的内存怎么计算,所以再次写了一篇这样的文章,想将这个知识点描述得更加容易理解正文:首先我们要知道结构体内存计算与编译器的默认对齐数有关,一般windows环境默认对齐数为8,linux默认对齐数为41.结构体内存对齐的基准取内存最大的变量的字节数与默认对齐数的较小值。2.结构体的总内存必须是内存最大的变量的整数倍数。例:在linux环境下,默认对齐数为4struct A...原创 2018-06-07 16:48:30 · 6006 阅读 · 1 评论 -
volatile的作用
voliate的作用是作为指令关键字,确保本条指令不会因为编译器的优化而省略,而且要求每次从内存中直接读取值当使用voliate 声明变量值时,系统总是重新从它所在的内存读取数据,直接访问变量地址,而编译器对于访问该变量时也不再进行优化voliate关键字影响编译器的结果,用voliate 声明的变量表示该变量随时可能发生变化(因为编译器优化时可能将其放入寄存器中),与该变量有关的运算,不要再进行...原创 2018-06-10 08:41:59 · 480 阅读 · 0 评论 -
练手的C语言小项目
有了这个列表,程序员不愁没练手的小项目了2016-06-16 Linux爱好者 (点击上方蓝字,可快速关注我们)英文:Martyr2译者:伯乐在线读者 链接:http://blog.jobbole.com/49762/我经常看有人发帖问关于项目点子的事,也看到了很多回帖,我自己也回了一些常见的项目。不过我觉得只列出三两个是远远不够的,因此就收集并这个项目列表,大家要找简单的编...转载 2018-08-07 02:01:57 · 5354 阅读 · 0 评论 -
指针数组 数组指针 函数指针 函数指针数组 指向函数指针数组的指针
1.指针数组2.数组指针3.函数指针4.函数指针数组5.指向函数指针数组的指针1.指针数组指针数组的就是指针的集合定义一个有5个iint*类型元素的数组如下:int *p[5]; 2.数组指针数组指针是指向一个数组的指针定义一个指向一个5个元素的数组的数组指针int (*p)[5];如果定义一个数组int a[5];数组指针与数...原创 2018-08-03 13:48:46 · 235 阅读 · 0 评论 -
两个例子告诉你#define和typedef哪个用来定义类型比较好
第一个例子#define PINT int*typedef int* pint;int main(){ pint a,b; PINT c,d;}首先a和b都是int*类型我们粗心的会认为c和d也是int*类型,实际上c是int*类型而d是int类型因为define是文本替代,在编译期间PINT c,d; 换成 int *c,d; ‘*’与c结...原创 2018-05-21 20:26:28 · 1476 阅读 · 0 评论 -
指针数组 数组指针 指针函数 函数指针
指针数组 数组指针 指针函数 函数指针有一篇很不错的文章介绍右左法则,原文链接。int *p[4]; //指针数组。 是个有4个元素的数组, 每个元素的是指向整型的指针。(数组的每个元素都是指针)int (*p)[4]; //数组指针。 它是一个指针,指向有4个整型元素的数组。 (一个指针指向有4个整型元素的数组)int *fun...原创 2018-05-20 00:10:03 · 179 阅读 · 0 评论 -
尖括号和双引号的区别
尖括号<>和双引号“”的区别:加双引号表示,应用程序先在当前的文件夹里面寻找该头文件,若没有找到,再到系统文件夹里去找。一般加双引号多为自己编写的头文件。加尖括号则表示,应用程序直接到系统文件夹去找该文件。这类多为系统头文件。...原创 2018-04-22 18:57:28 · 2053 阅读 · 0 评论 -
常量与变量
char *p="abcde";//在计算中的的某一个地方开辟了一个空间,其中储存了一个常量字符串"abcde",并且让p指向该字符串的首地址const int a=10;a=10;//不合法//定义了一个整形常量a,才是改变a是不合法的const int a=10;int *p=&a;*p=10;//合法//虽然a为整型常量,但是可以通过指针p来改变a的值...原创 2018-04-25 08:59:12 · 222 阅读 · 0 评论 -
char 类型的值的二进制是什么样
原创 2018-05-12 18:56:08 · 3850 阅读 · 0 评论 -
C/C++中的内存分配
原创 2018-05-12 23:45:15 · 134 阅读 · 0 评论 -
volatile作用
C情况下 const int num =10;int *p=(int *)&num;*p=20;printf("%d\n",num);return 0; //输出的值为20,改了C++情况下const int num =10;int *p=(int *)&num;*p=20;printf("%d\n",num);return 0; //输出的值为10,也改了,但是没看到const ...原创 2018-05-13 00:20:19 · 175 阅读 · 0 评论 -
编写程序判断大小端的两种方法
大端字节序储存,以字节为储存单位把一个数字的低字节序的内容存放到高地指处图解小端字节序储存把一个数字的低位字节序,存放到低地址处高位字节序的内容存放到高地址处图解编程判断机器的字节序是大端字节序储存还是小端字节序储存法1:int check_sys(){ int a=1; char *p=(char *)&a;//p只能操作一个字节的内存 return *p; }法2:int c...原创 2018-05-19 13:33:20 · 1074 阅读 · 0 评论 -
~运算符作用
按位取反如 unsigned char a=1;二进制为 00000001a=~a;现在二进制为11111110原创 2018-05-19 16:04:10 · 5989 阅读 · 0 评论 -
为什么要内存对齐
当我们听到”内存对齐“这个概念时,从字面意思来看,很容易理解。那就是让内存按一定规则对齐。 当然 就会有人说 你这不是废话 ?? 现在我就来说一说为什么要内存对齐以及怎么个对齐法(如何对齐)? 首先来谈谈什么叫内存对齐!!我百度了一下如下解释:内存对齐: 内存对齐”应该是编译器的“管辖范围”。编译器为程序中的每个“数据单元”安排在适当的位置...转载 2018-05-19 16:56:04 · 1024 阅读 · 0 评论 -
((sizeof(n)+sizeof(int)-1)&~(sizeof(int)-1))
((sizeof(n)+sizeof(int)-1)&~(sizeof(int)-1))的使用要追溯到 va_start(vp, n); 的使用,在我不断不断的转定义后出现了 #define _INTSIZEOF(n) ((sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1))问题就是 _INTSIZEOF(n) ...原创 2018-05-19 17:28:45 · 953 阅读 · 5 评论 -
字符串处理之gets与scanf("%s")的区别
一、快速了解1.scanf( )函数和gets( )函数都可用于输入字符串,但在功能上有区别。若想从键盘上输入字符串”hi hello”,则应该使用_gets_函数。2.gets可以接收空格,回车结束,gets(s)是输入一行;而scanf(%s)遇到空格、回车和Tab键都会认为输入结束,所有它不能接收空格。char string[15]; gets(string); /遇到回车认...转载 2018-08-31 21:10:03 · 815 阅读 · 0 评论