C 指针算术2025 年 3 月 28 日 | 阅读 6 分钟 我们可以对指针执行算术运算,如加法、减法等。但是,正如我们所知,指针包含地址,如果对指针执行的算术运算的另一个操作数是整数类型,那么结果也将是指针。在指针减指针的情况下,结果将是一个整数值。C 语言支持以下指针算术运算:
C 语言中指针的递增如果我们把一个指针加 1,指针将开始指向紧邻的下一个位置。这与一般的算术有些不同,因为指针的值将增加指针所指向的数据类型的大小。
我们可以通过使用指针的递增操作来遍历数组,该操作将继续指向数组的每个元素,对其执行一些操作,并在循环中更新自身。 指针递增的规则如下 其中 i 是指针增加的数值。 32 位对于 32 位 int 变量,它将增加 2 个字节。 64 位对于 64 位 int 变量,它将增加 4 个字节。 让我们看一个在 64 位架构上递增指针变量的示例。 示例编译并运行输出 Address of p variable is 3214864300 After increment: Address of p variable is 3214864304 使用指针遍历数组示例编译并运行输出 printing array elements... 1 2 3 4 5 C 语言中指针的递减与递增类似,我们可以递减指针变量。如果我们递减一个指针,它将开始指向前一个位置。指针递减的公式如下 32 位对于 32 位 int 变量,它将减少 2 个字节。 64 位对于 64 位 int 变量,它将减少 4 个字节。 让我们看一个在 64 位操作系统上递减指针变量的示例。 示例编译并运行输出 Address of p variable is 3214864300 After decrement: Address of p variable is 3214864296 C 指针加法我们可以给指针变量加一个值。指针加值的公式如下 32 位对于 32 位 int 变量,它将增加 2 * number。 64 位对于 64 位 int 变量,它将增加 4 * number。 让我们看一个在 64 位架构上给指针变量加值的示例。 示例编译并运行输出 Address of p variable is 3214864300 After adding 3: Address of p variable is 3214864312 可以看到,p 的地址是 3214864300。但在 p 变量加上 3 之后,它变成了 3214864312,即增加了 4*3=12。由于我们使用的是 64 位架构,它增加了 12。但如果我们使用的是 32 位架构,它将只增加 6,即 2*3=6。因为在 32 位操作系统中,整型变量占用 2 字节内存。 C 指针减法与指针加法类似,我们可以从指针变量中减去一个值。从指针中减去任何数字都会得到一个地址。从指针变量中减去值的公式如下 32 位对于 32 位 int 变量,它将减去 2 * number。 64 位对于 64 位 int 变量,它将减去 4 * number。 让我们看一个在 64 位架构上从指针变量中减去值的示例。 示例编译并运行输出 Address of p variable is 3214864300 After subtracting 3: Address of p variable is 3214864288 您可以看到,在从指针变量中减去 3 之后,它比前一个地址值少了 12 (4*3)。 但是,除了减去一个数字,我们还可以用一个地址减去另一个地址(指针)。这将导致一个数字。这不是简单的算术运算,而是遵循以下规则。 如果两个指针是同一类型, 考虑以下从一个指针减去另一个指针的示例。 示例编译并运行输出 Pointer Subtraction: 1030585080 - 1030585068 = 3 非法指针算术有各种不能对指针执行的操作。因为指针存储的是地址,所以我们必须忽略可能导致非法地址的操作,例如加法和乘法。以下是此类操作的列表:
C 语言中的函数指针正如我们在上一章中所讨论的,指针可以指向 C 中的一个函数。但是,指针变量的声明必须与函数相同。考虑以下使指针指向函数的示例。 示例编译并运行输出 Enter two numbers?10 15 The sum is 25 C 语言中的函数指针数组要理解函数指针数组的概念,我们必须理解函数数组。基本上,函数数组是一个包含函数地址的数组。换句话说,函数指针数组是指向包含函数指针的数组的指针。考虑以下示例。 示例编译并运行输出 printing the value returned by show : 65 Adding 90 to the value returned by show: 155 下一主题C 语言中的悬空指针 |
我们请求您订阅我们的新闻通讯以获取最新更新。