top/contents search

6. 数组和指针

6.1 我有定义char a[6],而在另一个文件中,我声明了extern char *a。为什么它不起作用?

6.2 但我听说char a[]char *a.

6.3 在 C 中,“指针和数组的等价性”是什么意思?

6.4 如果它们如此不同,那么为什么数组和指针声明可以互换地用作函数形式参数?

6.4b 那么数组是按引用传递的,即使 C 的其他部分使用按值传递?

6.5 为什么我不能这样做?

	extern char *getpass();
	char str[10];
	str = getpass("Enter password: ");

6.6 如果你不能赋值给数组,那么如何

	int f(char str[])
	{
		if(str[0] == '\0')
			str = "none";
		...
	}
的函数调用是否会工作?

6.6b 还有这个呢?这难道不是数组赋值吗?

	char a[] = "Hello, world!\n";

6.7 数组如何成为左值,如果你不能给它赋值?

6.8 实际上,数组和指针之间有什么区别?

6.9 有人向我解释说数组实际上是常量指针。

6.10 我仍然感到困惑。指针是一种数组,还是数组是一种指针?

6.11 我遇到了一些“笑话”代码,其中包含“表达式”5["abcdef"]这怎么会是合法的 C 代码?

6.12 由于数组引用会衰减为指针,如果arr是一个数组,那么arr&arr?

6.13 如何声明一个指向数组的指针?

6.14 如何在运行时设置数组的大小?
我怎样才能避免使用固定大小的数组?

6.15 如何声明一个大小与传入数组匹配的局部数组?

6.16 如何动态分配多维数组?

6.17 这是一个巧妙的技巧:如果我写

	int realarray[10];
	int *array = &realarray[-1];
我可以把array当作是基于 1 的数组。

6.18 我的编译器在将二维数组传递给期望指针之指针的函数时抱怨。

6.19 如何编写接受二维数组的函数,而其宽度在编译时未知?

6.20 在将静态分配和动态分配的多维数组传递给函数时,如何使它们可以互换使用?

6.21 为什么sizeof当数组是函数参数时,不能正确报告数组的大小?我有一个测试例程

	f(char a[10])
	{
		int i = sizeof(a);
		printf("%d\n", i);
	}
它打印 4,而不是 10。

6.22 在其中声明数组的代码如何extern(即,它在一个其他文件中定义,并确定其大小)确定数组的大小?sizeof似乎行不通。

6.23 我想知道数组中有多少个元素,但是sizeof返回字节大小。

6.24 有没有办法拥有一个位数组?


回到顶部

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

Eskimo North 托管