现在的位置: 首页 > 综合 > 正文

C语快速入门教程(3)

2016年05月27日 ⁄ 综合 ⁄ 共 1423字 ⁄ 字号 评论关闭

指针与数组 (这俩东西十分重要千万别弄错了)

指针是一变量变量

C语言,指针的使广,因之一是,指针常常是表达个计算的途径,

一个是,方法比较,使用指针通可以生紧凑

指针与数组之间切。

指针和 goto,会导程序

果使用者,指针容易错误的地方。 

这就是指针

P就是c 的指针,我们通过一个简单的示意图来说明内存是如何组织的。通常的机器都有一系列连
续编号或编址的存储单元,过些存储单元可以单个进行操纵,也可以以连续成组的方式操纵。
通常情况下,机器的一个字节可以存放一个char类型的数据,两个相邻的字节存储单元可存
储一个short(短整型)类型的数据,而4 个相邻的字节存储单元可存储一个long(长整型)
类型的数据。指针是能够存放一个地址的一组存储单元(通常是两个或4个字节)。因此,如
果c的类型是char,并且p是指向c的指针,则可用图表示它们之间的关系。

一元运算符&可用于取一个对象的地址,因此,下列语句:
p = &c;

将把c的地址赋值给变量p,我们称p为“指向”c的指针。地址运算符&只能应用于内存中
的对象,即变量与数组元素。它不能作用于表达式、常量或register类型的变量。

一元运算符*是间接寻址或间接引用运算符。当它作用于指针时,将访问指针所指向的对
象。我们在这里假定x 与y 是整数,而ip 是指向int 类型的指针,下面的代码段说明了如
何在程序中声明指针以及如何使用运算符&和*:

int *ip;

我们应该注意,指针只能指向某种特定类型的对象,也就是说,每个指针都必须指向某
种特定的数据类型。(一个例外情况是指向void 类型的指针可以存放指向任何类型的指针,
但它不能间接引用其自身)。

void * ip;

在 C 语言中,指针和数组之间的关系十分密切.
int a[10];
定义了一个长度为10的数组a。换句话说,它定义了一个由10个对象组成的集合,这10 个
对象存储在相邻的内存区域中,名字分别为a[0]、a[1]、…、a[9]
 
  
a[i]表示该数组的第i个元素。如果pa的声明为
int *pa;
则说明它是一个指向整型对象的指针,那么,赋值语句
pa = &a[0];
则可以将指针pa指向数组a的第0 个元素,也就是说,
pa的值为数组元素a[0]的地址这样,赋值语句
x = *pa;
将把数组元素a[0]中的内容复制到变量x中。
如果pa 指向数组中的某个特定元素,那么,根据指针运算的定义,pa+1 将指向下一个
元素,pa+i 将指向pa 所指向数组元素之后的第i 个元素,而pa-i 将指向pa 所指向数组
元素之前的第i 个元素。因此,如果指针pa 指向a[0],那么*(pa+1)引用的是数组元素
a[1]的内容,pa+i是数组元素a[i]的地址,*(pa+i)引用的是数组元素a[i]的内容.
如下图


无论数组a中元素的类型或数组长度是什么,上面的结论都成立。“指针加1”就意味着,
pa+1指向pa所指向的对象的下一个对象。相应地,pa+i指向pa所指向的对象之后的第i
个对象。
下标和指针运算之间具有密切的对应关系。根据定义,数组类型的变量或表达式的值是
该数组第0个元素的地址。执行赋值语句
pa = &a[0];
但是,我们必须记住,数组名和指针之间有一个不同之处,指针是一个变量,因此,在C
语言中,语句pa=a和pa++都是合法的。但数组名不是变量,因此,类似于a=pa和a++形
式的语句是非法的。



抱歉!评论已关闭.