易截截图软件、单文件、免安装、纯绿色、仅160KB

C traps and Puzzles

下面的例子都在Ubuntu8.04 GCC下编译的结果,有些没有给结果
编程一定要自己动手试一试!
1.定义与声明,定义要分配内存,声明只是声明在别处定义了
int a;     //定义
extern int a;  //声明
char str[100]
extern char str[]  //ok
char * str[]
extern char str[] //error
char str[100]
extern char * str //error
数组和指针是两码事!只是在某些情况下为了简化编译都当做指针处理
2.register 不能用取址运算符,因为可能不存放在内存中.
#include <stdio.h>
int main(void)
{
    register int r=10;
    int * ptr=&r;
    printf("%d\n",*ptr);
    return 0;
}
3.sizeof是关键字不是函数也不是宏
(define 不是关键字),sizeof在编译的时候就确定了,由编译器算出
int i=0;
sizeof(i) //4 ok
sizeof(int) //4 ok
sizeof i   //4 ok
sizeof int //error!
int *p=NULL;
sizeof(p)  //ok 4
sizeof(*p)  //ok 4!
int a[100];
sizeof(a)   //100
sizeof(&a)  //4
sizeof(&a[0]) //4
enum{A,B,C}e;
sizeof(e)   //4
4.void 指针
ANSI规定以不能对void 指针进行算法操作
void * vPtr;
vPtr++;     //error
vPtr+=1;   //error
但在GNU中
用GCC编译都是合法的!
用G++编译cpp文件确是不合法的!
VC没试过不知道。
5.volatile关键字
告诉编译器每次使用变量值的时候都是从内存中读出,而不进行任何优化,常用在多线程编程中。
6.空结构体空类
struct st{}st;
class cl{}cl;
g++编译结果sizeof(st)=1 sizeof(cl)=1;
gcc sizeof(st)=0!
7.fleible array
C99中,结构体的最后一个元素允许是大小未知的数组,但这个数组前面必须有一个其他类型的成员
struct F{int i; char a[0];}   sizeof(F)=4
struct F1{int i;char a[];}    sizeof(F1)=4
F1 * f1;
f1=(F1 *)malloc(sizeof(struct F1)+100*sizeof(char));/*给f1分配4+100byte的空间,这样数组a就有100个元素了*/
sizeof(f1)=4   //!还是4,说明sizeof是在编译的时候就确定了!
8.编写程序测试big/small endian
bool smallEndian(void)
{
    union endian{int i;char ch;}


相关文档:

C/C++中数组形参(转帖)

楔子
   去年,周星星大哥曾经在VCKBASE/C++论坛发表过一篇文章“数组引用"以避免"数组降阶”,当时我不能深入理解这种用法的含义;时隔一年,我的知识有几经锤炼,终于对此文章渐有所悟,所以把吾所知作想具体道来,竟也成了一篇文章。希望本文能对新手有所启迪,同时也希望大家发现本文中的疏漏之处后不吝留 ......

s3c2410平台下linux四键按键驱动程序

#ifndef __KERNEL__
#define __KERNEL__
#endif
#ifndef MODULE
#define MODULE
#endif
#include<linux/config.h>
#include<linux/module.h>
#include<linux/version.h>
#include<linux/init.h>
#include<linux/kernel.h>
#include<linux/errno.h>
#include<linux/sche ......

Linux设备驱动之I2C架构分析

一:前言
I2c是philips提出的外设总线.I2C只有两条线,一条串行数据线:SDA,一条是时钟线SCL.正因为这样,它方便了工程人员
的布线.另外,I2C是一种多主机控制总线.它和USB总线不同,USB是基于master-slave机制,任何设备的通信必须由主机发起才可以.而
I2C 是基于multi master机制.一同总线上可允许多个master.关于I2C协议的知 ......

经典C/C++面试题

1.介绍一下STL,详细说明STL如何实现vector。
Answer:
     STL (标准模版库,Standard Template Library)它由容器算法迭代器组成。
     STL有以下的一些优点:
     可以方便容易地实现搜索数据或对数据排序等一系列的算法;
 &nb ......

Windows Via C/C++: CreateThread函数

CreateThread函数
前面讲过,进程的主线程会在CreateProcess调用时自动创建。假如你要手工创建线程,你可以调用CreateThread函数:
HANDLE CreateThread(
PSECURITY_ATTRIBUTES psa,
DWORD cbStackSize,
PTHREAD_START_ROUTINE pfnStartAddr,
PVOID pvParam,
DWORD dwCreateFlags,
PDWORD pdwThreadID) ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号