top/contents search

1. 声明与初始化

1.1 我应该如何决定使用哪种整数类型?

1.2 为什么标准类型的尺寸没有精确定义?

1.3 由于 C 并没有精确定义尺寸,我一直在使用像int16int32这样的 typedef。我可以根据我使用的机器,将这些 typedef 定义为int, short, long等等。这样应该可以解决所有问题,对吧?

1.4 在能够支持它的机器上,64 位类型应该是多少?

1.5 这个声明有什么问题?

char* p1, p2;
当我尝试使用p2.

1.6 我正在尝试声明一个指针并为其分配一些空间,但它不起作用。这段代码有什么问题?

char *p;
*p = malloc(10);

1.7 声明和定义全局变量和函数的最佳方法是什么?

1.8 我如何在 C 中实现不透明(抽象)数据类型?

1.9 我如何创建一个“半全局”变量,即一个对分散在几个源文件中的少数函数私有的变量?

1.10 同一个静态函数或变量的所有声明是否都必须包含存储类别?静态?

1.11extern是什么意思?

1.12auto关键字有什么用?

1.13 使用typedef#define定义用户自定义类型有什么区别?

1.14 我似乎无法成功定义一个链表。我尝试了

	typedef struct {
		char *item;
		NODEPTR next;
	} *NODEPTR;
但编译器给出了错误消息。C 中的结构不能包含指向自身的指针吗?

1.15 我如何定义一对相互引用的结构?我尝试了

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

	typedef struct {
		int bfield;
		APTR apointer;
	} *BPTR;
但编译器在第一个结构声明中使用BPTR时并不知道它。

1.16 这两个声明有什么区别?

	struct x1 { ... };
	typedef struct { ... } x2;

1.17

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

1.18 我有声明

	typedef char *charp;
	const charp p;
为什么p变成const,而不是它指向的字符?

1.19 我不明白为什么不能在初始化列表和数组维度中使用const值,例如

	const int n = 5;
	int a[n];

1.20 之间有什么区别?const char *p, char const *p,而char * const p?

1.20b

函数参数const是什么意思?这两个const

	int f(const * const p)
是什么意思?

1.21 中有什么用?我如何构造复杂类型的声明,例如“指向函数返回指向函数返回指向char的指针的 N 个指针的数组”,或者如何理解类似复杂的声明?

1.22 我如何声明一个可以返回指向相同类型函数的指针的函数?我正在构建一个状态机,每个状态有一个函数,每个函数返回指向下一个状态函数的指针。但我找不到声明这些函数的方法——我似乎需要一个返回指向函数的指针的函数,该函数又返回指向函数的指针,等等,无限循环。

1.23 我能否声明一个局部数组(或参数数组),其大小与传入的数组匹配,或者由另一个参数设置?

1.24 我有一个extern数组定义在一个文件中,并在另一个文件中使用

file1.c:			file2.c:

int array[] = {1, 2, 3};	extern int array[];
为什么不sizeof数组file2.c?

1.25 我的编译器抱怨函数被无效地重新声明,但我只定义它一次并调用它一次。

1.25b 的正确声明是什么?main?
void main()正确的吗?

1.26 我的编译器抱怨函数原型不匹配,而它们在我看来是正确的。

1.27 我在一个文件的第一个声明处遇到了奇怪的语法错误,但它看起来没问题。

1.28 我的编译器不允许我声明一个大的数组,例如

double array[256][256];

1.29 我如何确定哪些标识符可以使用,哪些是保留的?

1.30 我可以假设哪些关于未显式初始化的变量和数组的初始值?
如果全局变量最初为“零”,这对空指针和浮点零是否足够好?

1.31 这段直接来自书籍的代码无法编译

int f()
{
	char a[] = "Hello, world!";
}

1.31b 这个初始化有什么问题?

char *p = malloc(10);
我的编译器抱怨“无效的初始化列表”或类似的消息。

1.32 这些初始化之间有什么区别?

char a[] = "string literal";
char *p  = "string literal";
如果我尝试为p[i].

1.33 分配新值,我的程序就会崩溃。char a[3] = "abc";合法吗?

1.34 我终于弄明白了声明函数指针的语法,但现在如何初始化一个函数指针?

1.35 我可以初始化联合(union)吗?


回到顶部

contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管