指针是一种保存变量地址的变量。
5.1 指针与地址
指针是能够存放一个地址的一组存储单元(通常是两个或4个字节)。
一元运算符&可用于取一个对象的地址,因此,下列语句:
p=&c;
将把c的地址赋值给变量p,我们称p为“指向”c的指针。地址运算符&只能应用于内存中的对象,即变量与数组元素。它不能作用于 表达式、常量或register类型的变量。
一元运算符*是间接寻址或间接引用运算符。当它作用于指针时,将访问指针所指向的对象。
指针只能指向某种特定类型的对象,也就是说,每个指针都必须指向某种特定的数据类型。(一个例外的情况是指向void类型的指针可以存放指向任何类型的指针,但它不能间接引用其自身)。
一元运算符*和&的优先级比算术运算符的优先级高,因此,赋值语句
y=*ip+1;
将把*ip所指向的对象的值取出并加1,然后再将结果赋值给y。
(*ip)++中的括号是必须的,否则,该表达式将对ip进行加1运算,而不是对ip指向的对象进行加1运算,这是因为,类似于*和++这样的一元运算符遵循从右至左的结合顺序。
5.2 指针与函数参数
由于C语言是以传值的方式将参数值传递给被调用函数。因此,被调用函数不能直接修改主调函数中变量的值。
指针参数使得被调用函数能够访问和修改主调函数中对象的值。
5.3 指针与数组
数组名和指针之间有一个不同之处,指针是一个变量。
当把数组名传递给一个函数时,实际上传递的是该数组的第一个元素的地址。在被调用的函数中,该参数是一个局部变量,因此,数组名参数必须是一个指针,也就是一个存储地址值的变量。
5.4 地址算术运算
如果p是一个指向数组中某个元素的指针,那么p++将对p进行自增运算并指向下一个元素,而p+=i将对p进行加i的增量运算,使其指向指针p当前所指向的元素之后的第i个元素。这类运算是指针或地址算术运算中最简单的形式。
分享到:
相关推荐
指针与指针数组也是常见的组合,指针数组可以存储一系列的指针,这样可以方便地管理和操作一组对象。例如,`int *ptrs[10];`定义了一个可以存储10个整型指针的数组。 最后,要特别注意指针的生命周期和空指针。未...
### 指针数组与数组指针的概念及区别 在计算机编程中,特别是C语言及其衍生语言中,指针是一个非常重要的概念。它允许程序员直接访问内存地址,并对其进行操作。当我们深入探讨指针时,会遇到两个看似相似但实际上...
3. **数组与指针的关系** - **数组名作为指针**:在很多情况下,数组名可以被视为指向数组首元素的指针。例如,`int *p = a`等同于`int *p = &a[0]`。 - **指针运算**:可以使用指针运算符对指针进行加减操作,如`...
在第四章“数组与指针”中,我们首先了解了数组及其简单应用。数组是一种数据结构,允许程序员存储一组具有相同类型的值。在C++中,数组的定义通常包括类型、数组名和数组的大小。例如,`int a[10];`定义了一个包含...
程序中定义了一个整型数组`a[5]`,然后使用指针`p`遍历数组,通过`*(p+i)`设置和打印数组元素的值。 总之,C语言中的指针与数组的关系是相辅相成的。指针能够灵活地处理数组,提供了对内存中数据的强大访问能力。...
指针数组与指向数组的指针是C语言中两种不同的概念。指针数组是一种数组,其元素是不同类型的指针,比如`char *p[5]`。而指向数组的指针,如`int (*p)[5]`,是一个指针,它指向一个含有5个整数的数组。这两种类型在...
本篇文章将深入探讨指针数组、数组指针以及二级指针这三种概念。 首先,我们要理解基本的指针概念。指针是变量的地址,当我们声明一个指针变量时,例如`int *p`,我们是在定义一个可以存储整型变量地址的指针。通过...
#### 五、深入理解数组与指针 1. **内存布局**: - 数组在内存中连续存储,而指针本身仅占用固定大小的空间(例如,在32位系统中通常是4个字节,在64位系统中通常是8个字节)。 - 指针可以指向数组的任意位置,而...
从给定的文件信息来看,主要讨论了C++中指针与数组的使用,特别是如何通过指针操作数组元素以及多维数组中的指针应用。下面将详细解析这些知识点: ### 指针与一维数组 #### 一、数组名作为指针 在C++中,数组名...
本教学资源“jidao-chap9 指针与数组(2017).ppt”显然是一个关于这两部分知识的详细讲解,适合C语言初学者和进阶者学习。 首先,我们来深入理解一下指针。指针在C语言中扮演着特殊的角色,它是一个变量,但存储的...
例如,`int *parr[5]` 定义了一个包含5个元素的指针数组,每个元素都是指向整型数据的指针。我们可以将它想象为一个存储5个整型指针的容器,元素包括`parr[0]`、`parr[1]`,以此类推。实际上,这本质上是一个数组。 ...
在C语言中,指针和数组是两种非常重要的数据结构,它们可以被组合使用,形成指针数组。在本章中,我们将深入探讨一个实际应用案例:如何使用指针数组来处理命令行参数。命令行参数是用户在运行程序时通过操作系统...
1. 使用指针数组来实现三整数的排序。 ```c void swap(int *pt1,int *pt2){ int temp; temp=*pt1; *pt1=*pt2; *pt2=temp; } void exchange(int *q1,int *q2,int *q3){ if(*q1<*q2)swap(q1,q2); if(*q1<*q3)...
本章节主要讨论的是C语言中指针与一维数组之间的紧密关系。在C语言中,数组名实际上是一个指向数组首元素的常量指针。因此,指针和一维数组之间有着天然的联系。 1. **一维数组元素的引用** 数组名`a`代表了数组的...
因为 `++P` 将指针 `P` 移动到数组 `a` 的第三个元素 `30`,然后 `*` 将其解引用得到 `30`。 [8.7] 表达式 `++*P` 的值是 `21`。因为 `*P` 将指针 `P` 解引用得到 `20`,然后 `++` 将其递增得到 `21`。 [8.8] 程序...
数组元素可以使用下标来访问,例如:a[5]访问数组a的第五个元素。数组元素的下标从0开始计数,即a[0]访问数组a的第一个元素。 需要注意的是,数组的大小不能在编译时确定,例如:long b = 10; float a[b];是错误的...
一、数组指针与指针数组的区别 1. 数组指针:数组指针是指向一个数组的指针,例如`int (*p)[5]`。这里的`p`是一个指针,它可以直接指向一个大小为5的整型数组。当你通过`p`访问数组时,`p`实际上是指向整个数组的首...
浅析C语言中指针与数组 本文旨在浅析C语言中指针与数组的概念、特征和应用。指针是C语言中的精华,正确灵活的应用指针,能动态的分配内存,有效的表示复杂的数据结构,方便的使用数组。指针极大丰富了C语言的功能。...
5. 指针与字符数组 C 语言中许多字符串操作都是由指向字符数组的指针及指针的运算来实现的。因为对于字符串来说,一般都是严格的顺序存取方式,使用指针可以打破这种存取方式,更为灵活地处理字符串。另外由于字符...