c语言指针国外研究,浅析C语言指针研究.pdf

浅析 C语 针

苏子伟/文

指针简介 通常我们称之为指针(pointer)。它是一种变量类型,这种变量

指针是C语言的一个最重要的特征,它提供了一种统一的 方便我们把需要操控的内存地址记忆起来。

方法,使其能访问远程的数据结构。但对C语言初学者而言, 定义指针

在编程过程中熟练的使用指针并不能像使用int型变量一样地轻 定义指针的运算符同乘法运算符是一样的,都用 “”表

松愉快,容易上手,往往是不得其精髓。我们知道,不论什么 示。定义一个指针变量在语法上是简单的,同我们定义其他变

时候,运行一个程序A,首先都是操作系统自身的加载器把A装 量的区别是:首先规定它指向的变量类型,然后并不是立即就

入内存,然后CPU才能执行。所以A程序的所有要素都会驻留 给出其变量的标识符 ,而是在变量类型同变量标识符之间插入

在 内存的某个位置。 指针运算符(星号),这样就告诉编译器这是一个指针变量。

言口

下面我们看一段示例程序。 C语言中指针可以指向任何的数据类型,包括函数。函数

# dude 指针的定义是:函数返回值+( + 函数指针变量标识符)+(函

匕日

intcmp(intfirst,intsecond) 数的参数列表)。函数指针能构建出更加清晰的程序结构。编程

{ 中经常使用的指针定义就是这两种,当然有些定义可能只是语

retum (first>second?first:second); 法上面有意义,但是语义上面不一定有具体的意义。例如,int

} (((f)())[])()声明f是一个函数指针,该函数返回一个指针,该

intmain(intargc,char argv) 指针指向数组 ,该数组元素是指针,那些指针指向返回值类型

{ 为整型指针的函数。这样的声明可能永远也不能应用到实际的

inti= 5: 代码中。

intJ=9; 指针j}口数组

retumcmp(i,j); 数组是内存中一段连续相同类型的内存数据,这组数据的

} 首地址 以数组名字来标识。所有数组对其数据的操控都可以使

首先,编译器会为变量i和j开辟内存空间,用来存储i和j的 用指针来实现 ,同理,指针指向一段内存数据时,也可以使用

值。同时也会为函数cmp开辟空间来存放其代码。这样使得最 数组下标的方式来实现操作。

终的可执行程序就变为了跟内存一一对应的序列。操作系统的 数组与指针在使用上的某些地方是非常相似的,但是数组

加载器把这个可执行程序载入内存后,cpu就可以按一条条的语 与指针又有一些细小的区别。数组名表现为一个静态指针,也

句顺序执行了。 可以直接把它赋值给指针变量,但它的大小与指针通常是不同

既然内存空间同程序的所有要素是一一对应的,那么怎么 的。数组名的内涵在于其指代的实体是一种数据结构,这种数

区分各要素的存放位置呢?内存使用不同的地址存放不同的要 据结构就是数组。数组名可以作为参数传人一个接受参数为指

素,如下所示。 针的函数内部,但是此时数组完全丢失了数组的本义,变成了

I兰l兰l l L:::::l l l垫!竺l l 完全的指针类型,其常量特性(可以作自增、自减等操作)可以

由于变量都

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值