《你必须知道的495个C语言问题》笔记--声明和初始化

1.定义一对相互引用的结构

typedef struct {
int afield;
BPTR bpoint;
} *APTR;

typedef struct {
int bfield;
BPTR apoint;
} *BPTR;

编译时会出错。


正确使用方法:

1.

struct b;
typedef struct {
int afield;
struct b *bpoint;
} *APTR;

struct a;
typedef struct {
int bfield;
struct a *apoint;
} *BPTR;

尽管编译器此时没有完成struct b的定义,但它仍然可以接受。


2.

typedef struct a *APTR;
typedef struct b *BPTR;
struct a{
int afield;
BPTR *bpoint;
};

struct b{
int bfield;
APTR *apoint;
};

2.typedef int (*funcptr)();是什么意思?

它定义了一个类型funcptr,表示指向返回值为int型的函数指针,它可以用来声明一个或多个函数指针。

funcptr fp1, fp2;

等价于

int (*pf1)(), (*pf2)();

3.void main()正确吗?

很多人甚至市面上的一些书籍,都使用了void main( ) ,其实这是错误的。C/C++ 中从来没有定义过void main( ) 。C++ 之父 

Bjarne Stroustrup 在他的主页上的 FAQ 中明确地写着 The definition void main( ) { /* ... */ } is not and never has been C++, 

nor has it even been C.( void main( ) 从来就不存在于 C++ 或者 C )。


4.extern数组

我在一个文件中定义了一个extern数组,然后在另一个文件中使用:

file1.c:

int array[] = {1,2,3};

file2.c

extern int array[];

为什么在file2.c中,sizeof取不到array的大小?

未指定大小的extern数组时不完全类型,不能对它使用sizeof。

有2种方法:

1.

file1.c:

int array[] = {1,2,3};

int arraysz = sizeof(array);

file2.c:

extern int array;

extern int arraysz;


2.

file1.h:

#define ARRAYSZ 3

file1.c:

#define "file1.h"

int array[ARRAYSZ];

file2.c:

#include "file1.h"

extern int array[ARRAYSZ];

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值