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];