上一页 1 2 3 4 5 6 7 ··· 19 下一页
摘要: /* f.c 用函数指针代替C++的引用参数 */ #include void fa(int a) /* 在函数中改变a,将不会带回主调函数(主调函数中的a仍是原值) */ { a=5; printf("在函数fa中:a=%d\n",a); } void fb(int *a) /* a为指针类型,在函数中改变*a,改变后的值将带回主调函数 */ { *a=5; printf("在函数fb中:*a=%d\n",*a); } void main() { int n=1; printf("在主程中,调用函数fa之前:n=%d\n",n); 阅读全文
posted @ 2013-12-17 23:33 cpoint 阅读(2803) 评论(0) 推荐(0) 编辑
摘要: The decimal number, 585 = 10010010012(binary), is palindromic in both bases.Find the sum of all numbers, less than one million, which are palindromic in base 10 and base 2.(Please note that the palindromic number, in either base, may not include leading zeros.) 1 #include 2 #include 3 #include 4 5 . 阅读全文
posted @ 2013-10-31 21:39 cpoint 阅读(707) 评论(17) 推荐(1) 编辑
摘要: 在linux内核代码中,经常看到do...while(0)的宏,do...while(0)有很多作用,下面举出几个:1、避免goto语句:通常,如果一个函数开始要分配一些资源,然后如果在中途遇到错误则要退出函数,当然,退出前要释放资源,我们的代码可能如下: 1 #defien N 10 2 3 bool Execute() 4 { 5 // 分配资源 6 int *p = (int *)malloc(N * sizeof(int)); 7 bool bOk = true; 8 9 // 执行并进行错误处理10 bOk = func1();11 if(!... 阅读全文
posted @ 2013-10-25 13:51 cpoint 阅读(10377) 评论(12) 推荐(9) 编辑
摘要: 接上一篇C语言中可变参数函数实现原理,从理论上详细介绍了C语言中可变参数函数的实现,这一篇从minix内核源码中的scanf函数入手,学习C语言经典可变参数函数的实现过程在scanf.c文件中,可以看到scanf函数,代码如下:#include #include #include "loc_incl.h"int scanf(const char *format, ...){ va_list ap; int retval; va_start(ap, format); retval = _doscan(stdin, format, ap); va_e... 阅读全文
posted @ 2013-10-19 01:10 cpoint 阅读(13702) 评论(0) 推荐(3) 编辑
摘要: 谈到C语言中可变参数函数的实现(参见C语言中可变参数函数实现原理),有一个头文件不得不谈,那就是stdarg.h本文从minix源码中的stdarg.h头文件入手进行分析: 1 #ifndef _STDARG_H 2 #define _STDARG_H 3 4 5 #ifdef __GNUC__ 6 /* The GNU C-compiler uses its own, but similar varargs mechanism. */ 7 8 typedef char *va_list; 9 10 /* Amount of space required in an argument l... 阅读全文
posted @ 2013-10-18 00:05 cpoint 阅读(7249) 评论(0) 推荐(3) 编辑
摘要: C函数调用的栈结构可变参数函数的实现与函数调用的栈结构密切相关,正常情况下C的函数参数入栈规则为__stdcall, 它是从右到左的,即函数中的最右边的参数最先入栈。例如,对于函数: void fun(int a, int b, int c) { int d; ... }其栈结构为 0x1ffc-->d 0x2000-->a 0x2004-->b 0x2008-->c对于在32位系统的多数编译器,每个栈单元的大小都是sizeof(int), 而函数的每个参数都至少要占一个栈单元大小,如函数 void fun1(char a, int b, double c, ... 阅读全文
posted @ 2013-10-17 00:59 cpoint 阅读(33009) 评论(8) 推荐(12) 编辑
摘要: 接上一篇:C语言内存对齐详解(2)在minix的stdarg.h文件中,定义了如下一个宏:/* Amount of space required in an argument list for an arg of type TYPE. * TYPE may alternatively be an expression whose type is used. */#define __va_rounded_size(TYPE) \ (((sizeof (TYPE) + sizeof (int) - 1) / sizeof (int)) * sizeof (int))从注释以及宏的名字可以看出是.. 阅读全文
posted @ 2013-10-15 02:47 cpoint 阅读(3187) 评论(0) 推荐(0) 编辑
摘要: 接上一篇:C语言内存对齐详解(1) VC对结构的存储的特殊处理确实提高CPU存储变量的速度,但是有时候也带来了一些麻烦,我们也屏蔽掉变量默认的对齐方式,自己可以设定变量的对齐方式。VC 中提供了#pragma pack(n)来设定变量以n字节对齐方式。n字节对齐就是说变量存放的起始地址的偏移量有两种情况:第一、如果n大于等于该变量所占用的字节数,那么偏移量必须满足默认的对齐方式;第二、如果n小于该变量的类型所占用的字节数,那么偏移量为n的倍数,不用满足默认的对齐方式。结构的总大小也有个约束条件,分下面两种情况:如果n大于所有成员变量类型所占用的字节数,那么结构的总大小必须为占用空间最大的变量占 阅读全文
posted @ 2013-10-15 00:22 cpoint 阅读(3270) 评论(12) 推荐(1) 编辑
摘要: 一、什么是字节对齐,为什么要对齐? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。比如有些架构的CPU在访问一个没有进行对齐的变量的时候会发生错误,那么在这种架构下编程必须保证字节对齐.其他平台可能没有这种情况,但是最常见的是如果不按照适合其平台要求对数据存放进行对齐,会在 阅读全文
posted @ 2013-10-14 21:41 cpoint 阅读(9200) 评论(0) 推荐(6) 编辑
摘要: 处理二维数组的函数有一处可能不太容易理解,数组的行可以在函数调用的时候传递,但是数组的列却只能被预置在函数内部。例如下面这样的定义:#define COLS 4int sum3d(int ar[][COLS], int rows){ int r, c, tot; tot = 0; for(r = 0; r 2 3 #define ROWS 3 4 #define COLS 4 5 6 int sum2d(int rows, int cols, int ar[rows][cols]) 7 { 8 int i, j, sum; 9 sum = 0;10 11... 阅读全文
posted @ 2013-10-14 14:42 cpoint 阅读(9040) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 ··· 19 下一页
浏览次数:travelocity promotion codes