C语言入门教程 指针操作

来源:本站
导读:目前正在解读《C语言入门教程 指针操作》的相关信息,《C语言入门教程 指针操作》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《C语言入门教程 指针操作》的详细说明。
简介: 指针是一种保存变量地址的变量。首先,我们通过一个简单的示意图来说明内存是如何组织的。通常的机器都有一系列连续编号或者编址的存储单元,这些存储单元可以单个进行操纵,也可以以连续成组的方式操纵。

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

C语言入门教程 指针操作

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

p = &c;

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

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

int x = 1, y = 2; z[10];

int *p; /* ip是指向int类型的指针 */

ip = &x; /* ip现在指向x */

y = *ip; /* y的值现在为1 */

*ip = 0; /* x的值现在为0 */

ip = &z[0]; /* ip现在指向z[0] */

指针ip的声明,如下所示:

int *ip;

这样的声明是为了便于记忆。该声明语句表面表达式*ip的结果是int类型。这种声明变量的语法与声明该变量所在表达式的语法类似。同样的原因,对函数的声明也可以采用这种方式。例如:

double *dp, atof(char *s);

表面,在表达式中,*dp和atof(s)的值都是double类型,且atof的参数是一个指向char类型的指针。

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

如果指针ip指向整型变量x,那么在x可以出现的任何上下文中都可以使用*ip,因此,语句

*ip = *ip + 10;

将把*ip的值增加10。

一元运算符*和&的优先级比算术运算符的优先级高,因此,赋值语句

y = *ip + 1

将把*ip指向的对象的值取出并加1,然后再将结果赋值给y,而下列赋值语句:

*ip += 1

则将ip指向的值加1,它等同于

++*ip

(*ip)++

语句的执行结果。语句(*ip)++中的圆括号是必须的,否则,该表达式将对ip进行加一运算,而不是对ip指向的对象进行加一运算,这是因为,类似于*和++这样的一元运算符遵循从又至左的结合顺序。

最后一点,由于指针也是变量,所以在程序中可以直接使用,而不必通过间接引用的方法使用。例如,如果iq是另一个指向整型的指针,那么语句

iq = ip

将把ip的值拷贝到iq中,这样,指针iq也将指向ip指向的对象。

提醒:《C语言入门教程 指针操作》最后刷新时间 2024-03-14 00:55:42,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《C语言入门教程 指针操作》该内容的真实性请自行鉴别。