自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 收藏
  • 关注

原创 Linux文件简单了解及文件的创建操作操作

Linux文件简单了解及文件的创建操作操作Linux下的文件具有一点哲学即“一切皆为文件”文件分为:普通文件、目录文件、设备文件、链接文件和管道文件其中以”-”的文件为普通文件       以”d”开头的文件为目录文件    以”c”开头的文件为字符设备文件以”d”开头的文件为块设备    以”L”开头的文件为链接文件     以”p”开头的文件为管道文件文件以”f

2016-12-03 22:29:38 295

原创 typedef和#define的区别

typedef:用来为复杂的声明定义简单的别名 且现有类型创建一个新的名字;typedef int INT;typedef char * pstr;#define:对一些常见的变量,字符串等,进行宏定义.#define flag 1#define是在编译预处理时进行简单的替换,不作语法检查,不管是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错,且没

2016-11-25 22:06:09 196

原创 宏函数与自定义函数的区别与优缺点

#define  max a > b ? a : b //比较大小的宏函数        int max(int a,int b)  //自定义比较大小的函数        {               return a > b ? a : b;        }        如上是两个简单的宏函数和自定义函数1、宏函数没有定义形参和返回值类型而自定义的函数定义形参和返

2016-11-24 22:40:58 442

原创 对关键字volatile的认识

volatile关键字就是一个类型修饰符是被设计用来修饰被不同线程访问和修改的变量。提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象,volatile经常用于嵌入式系统开发中。

2016-11-22 22:46:39 188

原创 对结构体struct的认识

Struct的作用:在网络协议,通信控制,嵌入式系统的C/C++的编程中,我们经常传送的不是简单字节流(char型数组),而是多种数据结合的一个整体,其表示形式是一个结构体。定义初始化结构体与使用结构体指针#include  struct student{    int  num;    char *name;//name[20]    int  age;   

2016-11-21 23:02:57 332

原创 对关键字register,static,extern的认识

register:只能修饰局部变量变量和函数,修饰局部变量保存在CPU内部寄存器中,省去了CPU从内存中抓取数据的时间从而提高程序的运行效率;这些局部变量一般是常被访问的变量如循环变量,但register修饰的变量类型应被出所接受,而register修饰的变量可能不是在内存中存储,所以不能通过取地址获取变量地址。static:既能修饰变量也能修饰函数。修饰变量,既能修饰全局变量也能修饰局部变量

2016-11-20 21:37:18 173

原创 调用函数的的步骤

1通过函数名找到函数入口地址2 给形参分配空间3传值:把实参变量对应内存空间的值传递给形参变量对应的空间4执行函数体语句5函数返回值并释放函数空间在函数参数传递的过程中如何确定传值和传地址:当只读(只使用不修改)实参变量的值时,传实参变量名;当写(既使用也秀给)实参变量对应内存空间的值,传实参变量对应内存空间的地址

2016-11-19 22:58:27 767

转载 对指针的认识

int num = 5;int *p;p = #p和num的关系如上图所示,p对应的内存空间里保存的是num对应内存空间的地址。如果进行p++操作,得到的是0x1004,因为int型变量是四个字节,如果是num是char型,那p++的结果就是0x1001。这也是步长的概念,对指针加一,跳了多少字节,步长就是多少。如果进行(*p)++操

2016-11-18 23:18:22 200

原创 memset()函数与bzero()函数的区别

函数格式 void *memset(void *s, int ch, size_t n) 函数解释:将s中前n个字节替换为ch并返回s;是用来在在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法。函数格式void bzero(void *s, int n);函数解释:s要置零的数据的起始地址; n要置零的数据字节个数,用来置字节字符串s的前n个字

2016-11-17 22:37:19 746

原创 realloc malloc calloc 的区别

realloc malloc calloc这三个函数都是用来进行存储空间地址的动态分配,但作用也有区别;        首先malloc函数的格式为 void *malloc(sizeof (变量类型) *size),它是用来划分一连续指定字节长度的存储空间,但初始值不确定 ; 返回值若配置成功则返回一指针首地址,失败则返回NULL 。colloc函数函数的格式 void *col

2016-11-16 21:00:37 275

原创 malloc的实现原理

在野指针中会用到malloc来分配空间,malloc的全称是memory allocation,中文叫动态内存分配,当无法知道内存具体位置的时候,想要绑定真正的内存空间,就需要用到动态的分配内存。如果在使用野指针时没有进行空间的分配,虽然编译时他不会出错但执行时就会提醒段错误;而但错误通常为内存错误和访问地址错误。所以就用到了malloc来分配空间。 malloc函数的实质体现在,它有一个

2016-11-15 22:33:59 325

原创 常用字符串遍历的三种方法

#include #include main(){    char *ptr = "hello world";    char *temp = ptr;            int i;    int len = strlen(ptr);        while(*temp != '\0')    {        print

2016-11-14 21:49:08 2520

原创 如何做到避免野指针

最好的方法就是养成良好的编程习惯:1、当指针没有确定的指向的时候,指向为空(NULL);2、当向指针指向空间进行赋值时,首先要看有没有存储空间 如没有就进行分配空间;3、mloloc不一定能分配空间成功,所以要检查malloc有没有成功分配空间;4、当空间使用后要使用memset清空空间内容;5、使用完后要对空间进行释放(free);6、再将指针置为空(NULL)。

2016-11-13 22:19:15 309

原创 十进制小数转二进制

十进制转二进制小数的程序#include #define NUM 2#define ZERO 0.000001void inttobin(int n){     int i;          for(i = 0; i     {        if((unsigned int)(n & 0x80000000) == (unsigne

2016-11-12 22:14:25 299

转载 趣味题

如果整数A全部因子和等于B,整数B全部因子和等于A,则整数A与B为亲密数,求3000以内全部亲密数#include #include  #define max 1024 main(){    int num;    int a[max];    int j;    int temp;        int i = 0;    int resu

2016-11-11 22:56:01 203

原创 进程虚拟地址空间的划分

使用的Linux操作系统32位4GB划分为两大部分内核和用户,内核1G,用户3G。1G的内核地址空间可访问全部的物理内存地址,3G的用户地址空间访问最大3G的物理内存地址。用户又划分为栈空间,堆空间,(全局)数据区,代码段。1、栈空间:存储着局部变量,函数形参,自动变量;2、堆空间:存放malloc、calloc、ralloc;3、(全局)数据区:分为三个部分 bss、orda

2016-11-09 22:39:57 353

原创 位运算

1. 输入一个32位的整数a,使用按位异或^运算,生成一个新的32位整数b,使得该整数b的每一位等于原整数a中该位左右两边两个bit位的异或结果#include #define max 1024void  exclusive_or(int num){    int i;        int j = 0;        int  src_

2016-11-08 22:34:20 167

原创 位运算题目的程序

输入一个整数a,再输入两个整数p1,p2(p1,p2输出该整数的二进制表示方法中从右端开始的p1到p2位.#include  #define max 1024 void  between2num(int num,int p1, int p2 ){    int i;        int j = 0;        int src[max];    

2016-11-07 22:42:20 199

原创 连续输入多个字符出现的问题解决方法

在连续输入多个字符时会编译时会出现跳过不让输入的情况;这种情况是因为scanf是行缓冲当我们按下回车时时内存中就会有’\n’,这也是一个字符char型默认输入。对待这种问题有是那种解法:1、在scanf内的%号前加空格;2、在两个scanf之间加getchar();3、scanf中输入%*c%c就行了

2016-11-06 21:49:40 1181

原创 全局变量与局部变量的区别

全局变量与局部变量的区别1、全局变量在程序执行结束后才释放内存空间而局部变量在该函数之行结束后就释放内存空间;2、全局变量存储在(全局)数据区,局部变量存储在栈空间;3、全局变量未初始化打印时系统赋值为0;而局部变量未初始化打印时系统随机赋值;4、当全局变量与局部变量重名时执行局部变量。

2016-11-05 22:11:52 318

原创 处理Linux下gets()字符输入函数不能运行问题

在c语言中字符数组的输入函数为gets(str);但这不能在linux下gcc编译器中运行。#include #include  main(){    int n;    char str[20];        int i;    int j;    int k;     printf("Please input a string(  

2016-11-04 21:31:29 1491

原创 注意程序前后相同变量类型一致

在写c语言时前后相同变量类型一定要一致不然出错还找不出来我写了一个平均数的c程序如下:#include  main(){    float score[3][4];    float ave_stu[3];    float ave_subject[4];     int i;    int j;     printf("Enter 12 dat

2016-11-03 22:26:51 322

原创 理解复杂C声明

在看别人程序火写程序之肯定会先声明变量那如何正确的去看这些声明,首先需要知道“右左法则”这在理解复杂声明时很重要。在使用“右左法则”时先确定变量的位置。先向变量的右边读再向左边读。先从简单开始:int a;整型变量   int *a;整型指针变量int **a;整型指针的指针变量Int *a[10]; 整形指针数组 int (*a)[10]; 整型数组指针变量  int (*a

2016-11-02 22:39:26 203

原创 试探法

今天在做C语言趣味编程时学习了一种新思路,试探法。其题目大致如下:A、B、C、D、E五个人在某天夜里合伙去捕鱼,到第二天凌晨时都疲惫不堪,于是各自找地方睡觉。日上三杆,A第一个醒来,他将鱼分为五份,把多余的一条鱼扔掉,拿走自己的一份。B第二个醒来,也将鱼分为五份,把多余的一条鱼扔掉,保持走自己的一份。C、D、E依次醒来,也按同样的方法拿走鱼。问他们合伙至少捕了多少条鱼?一看到这一题我不

2016-11-01 22:21:43 816

原创 对程序游离的错误处理

在写程序时我们可能会输入一些中文符号或空格这样在程序编译时就会出现程序游离的错误,符号还有可能找到但空格我们就无从下手了。save_max.c:40: 错误:程序中有游离的 ‘\343’save_max.c:40: 错误:程序中有游离的 ‘\200’save_max.c:40: 错误:程序中有游离的 ‘\200’save_max.c:40: 错误:程序中有游离的 ‘\343’s

2016-10-31 22:33:08 367

原创 GDB调试器的命令应用

程序写完后的调试过程中,传统我们会在程序中加入printf打印出相应位置的变量来确定程序出错的位置,这样查找错误会很麻烦而且改完错误还要删除printf的内容。而GDB调试器就改变这样的局面。   GDB主要用来完成以下三个方面: 1、启动被调试程序; 2、让被调试的程序在指定的位置停下; 3、当程序停下时,可以查找程序状态和变量值。在GDB中会用到的命令:运行程序:run

2016-10-30 20:42:11 136

原创 .c文件到可执行文件过程

.c文件到可执行文件过程可分为四个步骤,预处理,编译,汇编和链接1,预处理预处理是对#开头的头文件#include 的展开以及宏替换,条件编译后生成.i文件如下:.c源程序#include  #define MAX 100 main(){    char src[MAX];     #ifndef MAX    printf("hello word!

2016-10-29 21:12:53 285

原创 Linux操作系统中常用命令

切换用户su -               查看当前目录下文件ls       增添用户adduser修改或添加密码passwd      查看当前目录下文件详细内容ls - l(可执行状态)改变文件权限chnod          查看命令用途man          查看隐藏文件ls - a创建文件touch             写文件gedit          查看文件内

2016-10-28 22:04:58 141

原创 访问数组元素的三种方法

访问数组元素的三种方法1,通过下标来找元素#include main(){    int a[5];    int i;    for(i=0;i    scanf("%d",&a[i]);    printf("\n");    for(i=0;i    printf("%d",a[i]);    printf("\n");}2,通过地址来

2016-10-28 22:04:11 13769

转载 Linux下文件夹的作用

/bin:存放最常用命令; /dev:设备文件; /etc:存放各种配置文件;/home:用户主目录;/lib:系统最基本的动态链接共享库;/mnt:一般是空的,用来临时挂载别的文件系统;/proc:虚拟目录,是内存的映射;/sbin:系统管理员命令存放目录;/usr:最大的目录,存许应用程序和文件;/lost+found使用标准的ext2/ext3档案系统格式

2016-10-28 22:02:39 142

原创 C语言编程编程思维培养的重要性

今天在学习在练习C语言编程时,我感受到个人的编程思维的培养很重要,就拿今天做的2个趣味编程举例。1,问555555的约数中最大的三位数   最简单的想法就是从2到555554之间的所有数去除555555,求出所有约数。但是这里只要求约数是三位数,即从100-999之间将除数的范围大大缩小;我就是这样想的但我的思维还是惯性思维程序如下:#include int x,m=555555,

2016-10-25 22:37:06 1526

原创 C语言初学注意

在C语言中的除(/)与数学应用的区别数学应用中(/)是可以取小数的而在C语言中两个整数相除时只取商不取余数。在C语言的简单除法运算中应注意。如下题:#include main(){    int g=10,t=2;       float h;    h=1/2*g*t*t;    printf("%f",h);  }这个程序是错的在C语言中”1/2

2016-10-24 22:38:34 314

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除