41620935

Notebook

 
 
 
 
 
 

  ZhengHangJie

福建省 厦门市 摩羯座

 发消息  写留言

 
自我介绍福州大学/厦门大学 计算机系 QQ:41620935 E-mail:41620935@163.COM 有事联系我哦``
博客等级加载中...
今日访问加载中...
总访问量加载中...
最后登录加载中...
 
 
 
 
 
 
 
心情随笔列表加载中...
 
 
 
 
 

日历

 
 
模块内容加载中...
 
 
 
 
 

天气

 
 
模块内容加载中...
 
 
 
 
 
 
 
 
模块内容加载中...
 
 
 
 
 
 
 

[转]16道C语言面试题

2009-3-24 16:02:59 阅读(19) 评论(0)

6道C语言面试题

1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)

#define SECONDS_PER_YEAR   (60 * 60 * 24 * 365)UL

我在这想看到几件事情:

     1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)

     2). 懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。

阅读(19) | 评论(0) | 阅读全文>>

[转]#define与typedef

2009-3-24 15:55:52 阅读(6) 评论(0)

1) #define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错。例如:
#define PI 3.1415926
程序中的:area=PI*r*r 会替换为3.1415926*r*r
如果你把#define语句中的数字9 写成字母g 预处理也照样带入。

2)typedef是在编译时处理的。它在自己的作用域内给一个已经存在的类型一个别名,但是You cannot use the typedef specifier inside a function definition。

3)typedef int * int_ptr;

#define int_ptr int *
作用都是用int_ptr代表 int * ,但是二者不同,正如前面所说

阅读(6) | 评论(0) | 阅读全文>>

[转]宏与内联函数

2009-3-24 2:58:40 阅读(8) 评论(0)

第一部分:宏
为什么要使用宏呢?
因为函数的调用必须要将程序执行的顺序转移到函数所存放在内存中的某个地 址,将函数的程序内容执行完后,再返回到转去执行该函数前的地方。这种转移操作要求在转去执行前要保存现场并记忆执行的地址,转回后要恢复现场,并按原来 保存地址继续执行。因此,函数调用要有一定的时间和空间方面的开销,于是将影响其效率。
而宏只是在预处理的地方把代码展开,不需要额外的空间和时间方面的开销,所以调用一个宏比调用一个函数更有效率。
但是宏也有很多的不尽人意的地方。
1、宏不能访问对象的私有成员。
2、宏的定义很容易产生二意性。
我们举个例子:
#define square(x) (x*x)
我 们用一个数字去调用它,square(5),这样看上去没有什么错误,结果返回25,是正确的,但是如果我们

阅读(8) | 评论(0) | 阅读全文>>

[转]预处理简介

2009-3-24 2:57:27 阅读(3) 评论(0)

# 空指令,无任何效果
#include 包含一个源代码文件
#define 定义宏
#undef 取消已定义的宏
#if 如果给定条件为真,则编译下面代码
#ifdef 如果宏已经定义,则编译下面代码
#ifndef 如果宏没有定义,则编译下面代码
#elif 如果前面的#if给定条件不为真,当前条件为真,则编译下面代码
#endif 结束一个#if……#else条件编译块
#error 停止编译并显示错误信息 。
编译程序时,只要遇到 #error 就会跳出一个编译错误,其目的就是保证程序是按照你所设想的那样进行编译的。

阅读(3) | 评论(0) | 阅读全文>>

[转]#pragma 预处理指令详解

2009-3-24 2:46:57 阅读(3) 评论(0)

  #Pragma 指令的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma 指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的, 且对于每个编译器都是不同的。  
   其格式一般为:   #Pragma   Para  
  其中Para为参数,下面来看一些常用的参数。  

(1) #Pragma message参数能够在编译信息输出窗口中输出相应的信息

       这对于源代码信息的控制是非常重要的。其使用方法为: Pragma   message(“消息文本”)    

阅读(3) | 评论(0) | 阅读全文>>

[转]const常量、指向常量的指针和常量指针

2009-3-24 2:44:45 阅读(11) 评论(0)

1)先看const常量的情况:

const int a=2;
int const b=c; // c是已经声明过的整型
两者都可以。本地的const常量必须在第一次声明时就初始化,用变量或常量初始化都可以,只是初始化一次以后它的值就不能再改变了,此所谓const的含义。

2)接着看指向常量的指针:

const int *pa;
int const *pa;
两者也等价。因为指向常量的指针有时候会指向常量,所以它具有这个性质:“不能靠解引用改变它指向的对象的值”,以此保护它所指向的常量的常量性:
*pa =d; // 不可行(d是已经声明过的整型)

但指针本身的值是可变的:
pa=& d; // 可行(d是已经声明过的整型)

阅读(11) | 评论(0) | 阅读全文>>

[转]深入理解sizeof()

2009-3-24 2:43:48 阅读(10) 评论(0)

一、好首先看看sizeof和strlen在MSDN上的定义:

首先看一MSDN上如何对sizeof进行定义的:
sizeof Operator

sizeof expression

The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type
(including aggregate types). This keyword returns a value of type size_t.

The expression is either an identifier or a type-cast expression (a type specifier enclosed in

阅读(10) | 评论(0) | 阅读全文>>

[转]typedef的四个用途和两个陷阱

2009-3-24 2:41:47 阅读(5) 评论(0)

用途一:
定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如:
char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针,
// 和一个字符变量;
以下则可行:
typedef char* PCHAR; // 一般用大写
PCHAR pa, pb; // 可行,同时声明了两个指向字符变量的指针
虽然:
char *pa, *pb;
也可行,但相对来说没有用typedef的形式直观,尤其在需要大量指针的地方,typedef的方式更省事。

用途二:
用在旧的C的代码中(具体多旧没有查),帮助struct。以前的代码中,声明struct新对象时,必须要带上struct,即形式为: struct 结构名 对象名,如:

阅读(5) | 评论(0) | 阅读全文>>

[转]assert 用法

2009-3-24 2:39:06 阅读(21) 评论(0)

调试程序尤其是数据结构函数调用经常进行断言是一种好的习惯。本文简单介绍一下断言的使用方法,很简单Come on~

assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:
#include <assert.h>
void assert( int expression );

assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,
然后通过调用 abort 来终止程序运行。

请看下面的程序清单badptr.c:
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>

阅读(21) | 评论(0) | 阅读全文>>

[转]C标准输出格式

2009-3-24 2:37:53 阅读(92) 评论(0)

1 一般格式
   printf(格式控制,输出表列)
   例如:printf("i=%d,ch=%c\n",i,ch);
   说明:
   (1)“格式控制”是用双撇号括起来的字符串,也称“转换控制字符串”,它包括两种信息:
         ①格式说明:由“%”和格式字符组成,它的作用是将输出的数据转换为指定的格式输出。
         ②普通字符,即需要原样输出的字符。
   (2)“输出表列”是需要输出的一些数据,可以是表达式
   (3) printf函数的一般形式可以表示为
         printf(参数1,参数2,……,参数n)

阅读(92) | 评论(0) | 阅读全文>>

查看所有日志>>

 
 
 
 
 
 我要留言
 
 
 
留言列表加载中...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2009