上一页 下一个

C编程的基础知识

使用指针和数组

数组和指针在c .有效利用阵列紧密相连,你必须知道如何使用指针。18新利最新登入完全理解两者之间的关系可能需要几天的研究和实验,但它是值得的。

让我们从一个简单的例子开始在C数组:

广告

#定义最大10 int main () {int (MAX);int b (MAX);int我;(我= 0;我< MAX;我+ +)[我]=;b =一个;返回0;}

输入此代码并试图编译它。你会发现C将不会编译它。如果你想复制一个b,你必须输入类似如下:

(我= 0;我< MAX;我+ +)b[我]=[我];

或者,更简洁:

(我= 0;我< MAX;b[我]=[我],我+ +);

更好的是,使用memcpy实用程序在string.h

数组变量C是不同寻常的一个b不是,从技术上讲,数组本身。相反,他们是永久性的指向数组的指针。一个b永远指向数组第一个元素各自的——他们的地址一个[0]b [0]分别。因为它们是永久你不能改变地址的指针。该声明a = b;因此不工作。

因为一个b是指针,你可以用指针和数组做一些有趣的事情。例如,下面的代码:

#定义最大10空main () {int (MAX);int我;int * p;p =一个;(我= 0;我< MAX;我+ +)[我]=;printf (" % d \ n”* p);}
的状态变量在for循环开始执行。”width=
的状态变量在for循环开始执行。
18新利最新登入HowStuffWorks.com

该声明p =一个;因为工作一个是一个指针。从技术上讲,一个指向数组的实际第0个元素的地址。这个元素是一个整数,所以一个是一个指针指向一个整数。因此,声明p作为一个指针指向一个整数,它等于一个的工作原理。另一种方式说同样的事情将会取代p =一个;p =和[0];。自一个包含的地址一个[0],一个和[0]意思是一样的。

现在,p是指向第0个元素的一个,你可以做一些奇怪的事情。的一个变量是一个永久的指针,不能改变,但是p不受这些限制。使用C实际上鼓励你移动它指针的算术。例如,如果你说p + +;,编译器知道p指向一个整数,所以这种说法的增量p适当的字节数将它移动到下一个元素的数组。如果p指向一个100字节的数组——长结构,p + +;p由100字节。C照顾的细节元素的大小。

你可以复制到数组中一个b使用指针。下面的代码可以替代(因为我= 0;我< MAX;一个[我]= b[我],我+ +);:

p =一个;q = b;(我= 0;我< MAX;我+ +){* q = * p;q + +;p + +;}

你可以把这段代码如下:

p =一个;q = b;(我= 0;我< MAX;我+ +)* q + + = * p + +;

并可以进一步简化:

(p =, = b,我= 0;我< MAX;* q + + = * p + +我+ +);

如果你超出数组的结束一个b的指针p吗?C不在乎——它快活地沿着递增p,复制了其他变量。你需要小心当索引数组在C语言中,因为C假设您知道自己在做什么。

你可以通过数组等一个b一个函数在两种不同的方式。想象一个函数转储接受一个整数数组作为参数,将数组的内容打印到stdout。有两种方法的代码转储:

空白转储(int [], int nia) {int我;(我= 0;我< nia;我+ +)printf (" % d \ n”,[我]);}

或者:

空白转储(int * p, int nia) {int我;(我= 0;我< nia;我+ +)printf (" % d \ n”, * p + +);}

nia(number_in_array)变量是必需的,这样数组的大小。请注意,只有一个指针数组,而不是数组的内容传递给函数。还要注意,C函数可以接受适应可变数组作为参数。

特色
Baidu