自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小_鱼的专栏

男儿立志出乡关,学不成名誓不还。埋骨何须桑梓地,人生无处不青山!

  • 博客(49)
  • 收藏
  • 关注

转载 二维数组和二维指针 作函数参数

二维数组指针和函数参数首先,数组名和指针作函数的区别:  数组名是常量,不能变,不能作为左值,指针可以作为左值前几天看到一段代码,是在函数参数中传递二维数组的例子,弄得很糊涂,最近看了一下书,总结一下。1.指针和二维数组我们这里先定义一个二维数组:int zippo[4][2];/*整数数组的数组*/(1)zippo为二维数组的首地址,zippo

2013-06-30 23:35:00 3120

原创 《你必须知道的495个C语言问题》 笔记

为什么这样的代码: a[i] = i++; 不能工作?子表达式i++ 有一个副作用—– 它会改变i 的值—–由于i 在同一表达式的其它地方被引用, 这会导致无定义的结果, 无从判断该引用(左边的a[i] 中)是旧值还是新值//我自己在VC和gcc下编译能运行int main(){int i = 0;int a[] = {1,2,3,4};a[i] = i++; //

2013-06-30 22:11:04 513

转载 基于Linux的多播编程

一.单播,广播和多播1.单播用于两个主机之间的端对端通信,广播用于一个主机对整个局域网上所有主机上的数据通信。单播和广播是两个极端,要么对一个主机进行通信,要么对整个局域网上的主机进行通信。实际情况下,经常需要对一组特定的主机进行通信,而不是整个局域网上的所有主机,这就是多播的用途。2.多播的概念:1>多播,也称为“组播”,将局域网中同一业务类型主机进行了逻辑上的分组,进行

2013-06-29 15:46:07 501

转载 uname gethostname getdomainname

linux系统中如何通过程序来获知系统信息      最近在做一个项目,遇到要在程序中动态的获取设备硬件信息。纠结了我很长时间,今天突然发现原来在linux中有API函数直接就可以实现。对于好东西,当然要和大家share下了。一.uname()函数1.使用uname函数来实现获取系统信息1>函数原型#include int uname(struct

2013-06-29 15:24:37 972

转载 B/S和C/S的区别

一、什么是CS和BS结构?1.C/S又称Client/Server或客户/服务器模式。服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、Informix或SQLServer。客户端需要安装专用的客户端软件。2.B/S是Brower/Server的缩写,客户机上只要安装一个浏览器(Browser),如Netscape Navigator或

2013-06-29 12:47:04 451

转载 atoi函数

把字符串转换成整型数.2.原型:int atoi(const char *nptr);3.函数说明: 参数nptr字符串,如果第一个非空字符不存在或者不是数字也不是正负号则返回零,否则开始做类型转换,之后检测到非数字(包括结束符 \0) 字符时停止转换,返回整型数。4.头文件: #include stdlib.h>1234.5678 -->  1

2013-06-29 12:37:13 445

转载 几个 关于时间 的函数

一、 基础知识1、时间类型。Linux下常用的时间类型有4个:time_t,struct timeval,struct timespec,struct tm。(1)time_t是一个长整型,一般用来表示用1970年以来的秒数。(2)Struct timeval有两个成员,一个是秒,一个是微妙。struct timeval {               long tv_se

2013-06-29 12:30:40 687

转载 C语言随机函数应用

1前言:有些程序每次执行时不应该产生相同的结果,如游戏和模拟,此时随机数就非常有用。下面这两个函数合在一起使用能够产生伪随机数(pseudo-random  number):通过计算产生的随机数,可能有重复出现,所以并不是真正的随机数。int   rand(void);void  srand(unsigned  int  seed);1>rand返回一个范围在0和RAND_

2013-06-29 12:16:18 490

转载 C语言写 系统日志

我门在做一些大型项目时候,在编写程序中时会考虑到,如果出现一些异常的时候是直接抛出异常呢,还是将异常写入到日志文件中,提供给系统管理员来查看。以下就针对这两种情况分别介绍在Linux中如何将异常写入日志或者是直接抛出异常。一.抛出异常在C语言中抛出异常,是用的最多,也是最简单的。因为我们先来talk下它的使用方法。1.使用exit()函数来实现抛出异常1

2013-06-29 12:04:52 1962

转载 动态分配内存 malloc、calloc、realloc

.当数组被声明时,必须在编译时知道它的长度。动态内存分配允许程序为一个长度在运行时才知道的数组分配内存空间。malloc从内存池中提取一块合适的内存。并向该程序返回一个指向这块内存的指针。这块内存此时并没有以任何方式进行初始化。如果要对其进行初始化,要么自己动手进行初始化,要么使用calloc()函数void *malloc(size_t  size);如果操作系统无法向m

2013-06-29 11:40:31 637

转载 字符串常量 表达式

1.当一个字符串常量出现于表达式中时,它的值是一个指针常量。编译器被这些指定字符的一份拷贝存储在内存的某个位置,并存储一个指向第一个字符的指针。(数组名用于表达式中时,它的值也是指针常量)2.”xyz”+1因为字符串常量实际上是个常量指针,这个表达式计算“指针值加上1”的数值。它的结果是个指针,指向字符串中的第2个字符:y。3.*”xyz”因为“xy

2013-06-29 11:18:00 1809

转载 编译预处理

.预定义符号1.以下为预处理器定义的符号。它们的值或者是字符串常量,或者是十进制数字常量。2.__FILE__和__LINE__在确认调试输出时很有用。__DATE__和__TIME__常常用于在被编译的程序中加入版本信息。3.__STDC__用于那些在ANSI环境和非ANSI环境都必须进行编译的程序中结合条件编译。此处的前缀是两个下划线.² __F

2013-06-29 11:13:15 497

转载 函数返回类型为指针类型的一些问题

1.先看程序:#includechar  *returnStr(){           char  *p = “tigerjibo”;           return  p;}int  main(){           char*str;           str =returnStr();

2013-06-29 10:51:03 534

转载 GCC 及其选项

1.gcc编译器(1)程序的编译过程在使用gcc编译程序时,编译过程可以分为4个阶段:a.预处理(pre-processing)b.编译(compiling)c.汇编(assembing)d.链接(linking)(2)在功能上,预处理,编译,汇编是三个不同的阶段a.在预处理阶段,输入的是C语言的源文件,通常为*.c或*.C.它们一般

2013-06-29 09:59:49 623

转载 如何查看进程打开了哪些文件?

有许多情况下,我们需要查看一个进程当前打开了哪些文件,反过来我们也希望知道某一个文件正在被哪些进程所读写。在Linux下有许多有用的工具可以帮我们完成这两个工作,下面介绍这两个工具:lsof与fuser。  fuser find files or sockets' user  格式:fuser [选项] fname  -k 如果找到打开文件的进程,则发送SIGKILL杀死此进程,通过-

2013-06-29 00:07:59 886

转载 GNU C扩展

注意:一下函数在windows下可能不能通过编译,在linux下可以。 (GNU C )一.结构体赋值:1、对成员赋值例如结构体struct st1 {int a;int b;int c;}1.1 用 {}形式struct st1 st1 = {1,2,3);1.2 linux kernel风格stru

2013-06-28 23:50:30 658

转载 C 易错知识点

1、#includeintmain() {         int a=1;         switch(a)         {          int b=20;                 case 1:            printf("b is %d\n",b);            break

2013-06-28 21:42:08 472

转载 C extern关键字

2、下面,我们再来看一个交叉编译的事情,下面的两个文件可以编译通过吗?如果可以通过,结果是什么?file1.c  int arr[80];file2.cexternint *arr;intmain() {         arr[1] = 100;    printf("%d\n", arr[1]);    ret

2013-06-28 21:08:50 446

转载 ARM汇编语言源程序格式(比较全,抽时间得好好看看)

常用ARM源程序文件类型 汇编语言程序的结构1 汇编语言程序的结构2 汇编语言程序的结构3 汇编语言程序的结构4 ARM的汇编语言程序一般由几个段组成,每个段均由AREA伪操作定义。 段可以分为多种,如代码段、数据段、通用段,每个段又有不同的属性,如代码段的默认属性为READON

2013-06-28 20:19:37 3284

转载 ARM中的B指令和BL指令

在ARM处理器里主要是通过3中情况在控制程序执行的:1.流水方式执行程序,PC的值是下一条指令的地址,即每执行一条指令PC都加一个字的偏移。2.通过跳转指令来控制程序执行。   B 跳转到指定的指令处执行。   BL 跳转执行,保存子程序地址并返回。   BX 跳转执行并切换到Thumb状态。   BLX 三种方式组合

2013-06-28 17:30:54 1645

转载 NAND FLASH 和NOR FLASH的 特点和区别

1 .NOR Flash和NAND Flash启动说明1>NOR flash有自己的数据和地址总线,因此可采用类似RAM的随机访问,因此是可以直接在它上面运行程序的,因此是可以直接在它上面运行程序的,因此NOR Flash是可以用来Boot的。这种片上运行叫做execute in place即EIP.2>S3C2410之所以可以将loader代码烧在NAND上从而boot,是由于s

2013-06-28 14:39:41 1836

原创 内存地址(字节) 对齐

#pragma pack(n)  //n = 1,2,3.。。。  可以改变系统默认地址对齐大小#pragma pack(1)  //改为1字节对齐struct s1 { char a; int b; char c;};int main (){struct s1 s;printf("%d\n",sizeof(s));     //s = 6 }

2013-06-28 14:15:23 624

转载 嵌入式C语言编程小知识

1.   流水线被指令填满时才能发挥最大效能,即每时钟周期完成一条指令的执行(仅指单周期指令)。如果程序发生跳转,流水线会被清空,这将需要几个时钟才能使流水线再次填满。因此,尽量少的使用跳转指令可以提高程序执行效率,解决发案就是尽量使用指令的“条件执行”功能。2.   数组指针(类似于函数指针)1>int  (*p)[4]表示*p有4个元素,每个

2013-06-28 13:18:49 696

转载 volatile 关键字

一.前言1.编译器优化介绍:由于内存访问速度远不及CPU处理速度,为提高机器整体性能,在硬件上引入硬件高速缓存Cache,加速对内存的访问。另外在现代CPU中指令的执行并不一定严格按照顺序执行,没有相关性的指令可以乱序执行,以充分利用CPU的指令流水线,提高执行速度。以上是硬件级别的优化。再看软件一级的优化:一种是在编写代码时由程序员优化,另一种是由编译器进行优化。编译器优化常用的

2013-06-28 11:25:33 373

原创 《C与陷阱》 笔记

1、词法分析中的贪心法:规则:每个符号包含尽可能多的字符 。即:读入符号的下一个字符,若2个字符组成的字符串依然是一个符号的组成部分,继续读入下一个字符,直到不能组成一个符号为止。如:a---b     a-- - b   与a- --b区别y = x/*p 此时p被注释          应为  y =  x / *p (/ * 间有空格)  或y= x/(*p)a -=

2013-06-27 14:47:17 396

转载 return 与 exit 联系与区别

exit函数是退出应用程序,删除进程使用的内存空间,并将应用程序的一个状态返回给OS,这个状态标识了应用程序的一些运行信息,这个信息和机器和操作系统有关,一般是 0 为正常退出,非0 为非正常退出。.return是语言级别的,它表示了调用堆栈的返回;而exit是系统调用级别的,它表示了一个进程的结束。C语言中的return, exit, break, conti

2013-06-27 11:21:35 438

转载 国嵌嵌入式应用班 答疑

S:运行fork的时候 函数会创建一个子进程 这个子进程会拷贝父进程的数据段 包括地址空间(页表) 而在老师后面的课程中讲到两个进程它们的地址空间是独立的 那我的疑问是: 既然子进程从父进程中拷贝了这个页表 虽然这两个页表是独立的 但是里面的内容不是相同的吗 那变量a存放的虚拟地址:-1354661604 通过这两个独立但内容相同的页表 所映射到实际物理内存不就相同了吗 难道子进程把拷贝过来的

2013-06-27 11:11:22 568

转载 poll 和select 区别

unix下poll()函数 函数  Linux中的字符设备驱动中有一个函数   unsigned int (*poll)(struct file * fp, struct poll_table_struct * table)   此函数在系统调用select内部被使用,作用是把当前的文件指针挂到设备内部定义的等待   队列中。这里的参数table可以不考虑,是在selec

2013-06-27 00:39:05 927

转载 国嵌答疑1

1、printf打印问题S:老师我有个问题,为什么    我编译的语句:    printf("please enter a number%d\n");    输出结果是:please enter a number7451168T:    里面的%d ,%s等和后面的参数一一对应 这个时候后面没有参数了 但是printf会把栈上的4个字节打印出来了 ma

2013-06-27 00:38:15 678

转载 函数指针 和 指针函数

使用函数指针的好处在于,可以将实现同一功能的多个模块统一起来标识,这样一来更容易后期的维护,系统结构更加清晰。或者归纳为:便于分层设计、利于系统抽象、降低耦合度以及使接口与实现分开       在程序运行中,函数代码是程序的算法指令部分,它们和数组一样也占用存储空间,都有相应的地址。      可以使用指针变量指向数组的首地址,也可以使用指针变量指向函数代码的首地址,

2013-06-26 23:22:19 416

转载 算法之哈希表

hash表,有时候也被称为散列表。个人认为,hash表是介于链表和二叉树之间的一种中间结构。链表使用十分方便,但是数据查找十分麻烦;二叉树中的数据严格有序,但是这是以多一个指针作为代价的结果。hash表既满足了数据的查找方便,同时不占用太多的内容空间,使用也十分方便。    打个比方来说,所有的数据就好像许许多多的书本。如果这些书本是一本一本堆起来的,就好像链表或者线性表一样,整个数据会显

2013-06-26 15:47:36 422

转载 VI的使用

vi有3个模式:插入模式、命令模式、底行模式。插入模式:在此模式下可以输入字符,按ESC将回到命令模式。命令模式:可以移动光标、删除字符等。低行模式:可以保存文件、退出vi、设置vi、查找等功能(低行模式也可以看作是命令模式里的)。1、打开文件、保存、关闭文件(vi命令模式下使用)vi filename       //打开filename文件:w

2013-06-26 15:38:38 396

转载 socket编程中的5个安全隐患

隐患 1.忽略返回状态第一个隐患很明显,但它是开发新手最容易犯的一个错误。如果您忽略函数的返回状态,当它们失败或部分成功的时候,您也许会迷失。反过来,这可能传播错误,使定位问题的源头变得困难。捕获并检查每一个返回状态,而不是忽略它们。考虑清单 1 显示的例子,一个套接字send 函数。 清单 1. 忽略 API 函数返回状态int status, sock,

2013-06-26 15:36:44 1299

原创 scanf 格式化输入 getchar

int  a,  b;char c;scanf ("%d     %d",&a,  &b);       //若%d%d之间无逗号,输入时用空格或tab键, 若有逗号,输入时也应有逗号。getchar();                 //若c为int型,可以不需要getchar(),但若C为字符型,必须要getchar,它接受上个scanf输入的回车字符, 若不加getchar,

2013-06-26 09:39:06 576

原创 给结构体内数组赋值

C语言只有在定义字符数组时才能用 ‘=’ 来初始化赋值,其他情况不能用 =如: char a[20] ="hello world";不能 char a[20];a = "hello world";但可用strcpy (a, "hello world");        //包涵结构体typedef struct _stu{char  name[20];

2013-06-25 16:07:40 7641

转载 使用GDB 调试程序

一般来说,GDB主要帮忙你完成下面四个方面的功能:    1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。    2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)    3、当程序被停住时,可以检查此时你的程序中所发生的事。    4、动态的改变你程序的执行环境。一般来说GDB主要调试的是C/C++的程序。要调试C/C++的程序,

2013-06-24 21:51:41 551

原创 字符数组定义

#include typedef unsigned char u;int main(){ u8 a[] = {'0x51', '0x52', '0x53', '0x55','\0'};    //这种写法,后面要加'\0'  ,否则 sizeof(a) = 4,  printf溢出 int n = sizeof(a);            //5 printf("n =

2013-06-24 19:10:04 614

原创 定义变量前切记分配内存

保存数据必须要内存如:void fun(int *e){*e = 1;}int main(){int *a ;fun(a);printf("%d",*a);} -----------------------------------------------------------编译出错void fun(int *e){

2013-06-24 11:54:23 537

转载 C/C++ static 关键字详解

静态变量作用范围在一个文件内,程序开始时分配空间,结束时释放空间,默认初始化为0,使用时可以改变其值。    静态变量或静态函数只有本文件内的代码才能访问它,它的名字在其它文件中不可见。用法1:函数内部声明的static变量,可作为对象间的一种通信机制    如果一局部变量被声明为static,那么将只有唯一的一个静态分配的对象,它被用于在该函数的所有调用中表示这个变量。这个对象将

2013-06-23 17:22:47 435

原创 从(0,1)中平均随机出几次才能使得和超过1?(e)

为了证明这一点,让我们先来看一个更简单的问题:任取两个 0 到 1 之间的实数,它们的和小于 1 的概率有多大?容易想到,满足 x+y∫(0..1) (x^2)*1/2 dx = 1/6可以想到,四个 0 到 1 之间的随机数之和小于 1 的概率就等于四维立方体一角的“体积”,它的“底面”是一个体积为 1/6 的三维体,在第四维上对其进行积分便可得到其“体积”

2013-06-23 16:50:04 894

空空如也

空空如也

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

TA关注的人

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