求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
要资料
 
 

C语言教程
C语言历史
C语言特点
C语言VS开发环境安装
C语言第一个程序
C语言程序执行流程
C语言printf()和scanf()函数
C语言变量
C语言数据类型
C语言关键字
C语言运算符
C语言注释
C语言转义序列
C语言常量
C语言控制语句
C语言if-else语句
C语言switch语句
C语言循环
C语言do-while循环
C语言while循环
C语言for循环
C语言break语句
C语言continue语句
C语言goto语句
C语言类型转换
C语言函数
C语言函数
C语言通过值和引用函数
C语言递归
C语言存储分类
C语言数组
C语言数组
C语言二维数组
C语言将数组传递给函数
C语言指针
C语言指针
C语言指针的指针
C语言指针算术运算
C语言字符串
C语言字符串
C语言gets()和puts()函数
C语言字符串函数
C语言strlen()函数
C语言strcpy()函数
C语言strcat()函数
C语言strcmp()函数
C语言strrev()函数
C语言strlwr()函数
C语言strupr()函数
结构联合体
C语言结构体
C语言结构体数组
C语言结构体嵌套
C语言联合体
文件处理
C语言文件处理
C语言fprintf()和fscanf()函数
C语言fputc()和fgetc()函数
C语言fputs()和fgets()函数
C语言fseek()函数
C语言rewind()函数
C语言ftell()函数
预处理器
C语言预处理器指令
C语言宏
C语言#include指令
C语言#define指令
C语言#undef指令
C语言#ifdef指令
C语言#ifndef指令
C语言#if指令
C语言#error指令
C语言#pragma指令
其它杂项
C语言数学函数
C语言命令行参数
 
 

C语言指针算术运算
1017 次浏览
10次  

在C语言指针中保存一个值的地址,所以可以对指针变量进行算术运算。 C语言中的指针可以进行以下算术运算:

  • 递增
  • 递减
  • 加法
  • 减法
  • 比较

1.递增指针

在数组中使用递增指针是因为它是连续的内存位置。此外,经过计算我们可以知道下一个位置的值。

递增操作取决于指针变量的数据类型。递增指针的公式如下:

new_address= current_address + i * size_of(data type)

32位

对于32位int变量,它将增加到2个字节。

64位

对于64位int变量,它将增加到4个字节。

下面来看看看在64位操作系统上增加指针变量的例子。创建一个源文件:increment-pointer.c,其代码如下 -

#include <stdio.h>
void main() {
int number = 50;
int *p;//pointer to int
p = &number;//stores the address of number variable
printf("Address of p variable is %u \n", p);
p = p + 1;
printf("After increment: Address of p variable is %u \n", p);
}

执行上面示例代码,得到以下结果 -

Address of p variable is 17824724
After increment: Address of p variable is 17824728

2.指针递减

与指针递增一样,我们可以递减一个指针变量。递减指针的公式如下:

32位

对于32位int变量,它将递减2个字节。

64位

对于64位int变量,它将递减4个字节。

我们来看看在64位操作系统上递减指针变量的例子。创建一个源文件:decrement-pointer.c,其代码如下 -

#include <stdio.h>
void main() {
int number = 50;
int *p;//pointer to int
p = &number;//stores the address of number variable
printf("Address of p variable is %u \n", p);
p = p - 1;
printf("After decrement: Address of p variable is %u \n", p);
}

执行上面示例代码,得到以下结果 -

Address of p variable is 18218432
After decrement: Address of p variable is 18218428

3.指针相加

我们可以在指针变量上相加一个值。指针相加值的公式如下:

new_address= current_address + (number * size_of(data type))

32位

对于32位int变量,它将相加上2 * number的值。

64位

对于64位int变量,它将增加4 * number的值。

下面来看看看在64位操作系统上相加一个值到指针变量的例子。创建一个源文件:addition-pointer.c,其代码如下 -

#include <stdio.h>
void main() {
int number = 50;
int *p;//pointer to int
p = &number;//stores the address of number variable
printf("Address of p variable is %u \n", p);
p = p + 3; //adding 3 to pointer variable
printf("After adding 3: Address of p variable is %u \n", p);
}

执行上面示例代码,得到以下结果 -

Address of p variable is 11926728
After adding 3: Address of p variable is 11926740

正如你所看到的,p的地址是11926728,但是在添加了3与p变量之后,它是11926740,即4 * 3 = 12增量。由于我们使用64位操作系统,所以它会相加12,但是如果使用32位操作系统,它会相加6,即2 * 3 = 6。这是由于整数值占用32位操作系统中的2字节内存。

4.指针减法

类似于指针加法,我们可以从指针变量中减去一个值。下面给出了从指针变量中减去指定值的公式:

new_address= current_address - (number * size_of(data type))

32位

对于32位int变量,它将减去2 * number的值。

64位

对于 64位int变量,它将减去4 * number的值。

我们来看一下64位操作系统从指针变量减去指定值的例子。

创建一个源文件:subtraction-pointer.c,其代码如下 -

#include <stdio.h>
void main() {
int number = 50;
int *p;//pointer to int
p = &number;//stores the address of number variable
printf("Address of p variable is %u \n", p);
p = p - 3; //subtracting 3 from pointer variable
printf("After subtracting 3: Address of p variable is %u \n", p);
}

执行上面示例代码,得到以下结果 -

Address of p variable is 17825120
After subtracting 3: Address of p variable is 17825108

从指针变量中减去3后,可以看到比前一个地址值小12,即:(4 * 3)。


您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码: 验证码,看不清楚?请点击刷新验证码 必填



1017 次浏览
10次
 捐助