指针运算
指针的算术运算:
运算符 | 计算形式 | 意义 |
---|---|---|
+ | px+n | 指针向地址大的方向移动n个数据 |
- | px-n | 指针向地址小的方向移动n个数据 |
++ | px++ | 指针向地址大的方向移动1个数据 |
-- | px-- | 指针向地址小的方向移动1个数据 |
- | px-py | 两个指针之间相隔数据元素的个数 |
注意:
不同数据类型的两个指针实际加减整数运算是无意义的
px+n表示的实际位置的地址量是:
(px) + sizeof(px的类型) *n
px-n表示的实际位置的地址量是:
(px) - sizeof(px的类型) *n
两指针相减运算
px-py运算的结果是两指针指向的地址位置之间相隔数据的个数,因此两指针相减不是两指针持有地址值相减的结果。
s两指针相减的结果值不是地址量,而是一个整数值,表示两指针之间相隔数据的个数。
![](https://img.haomeiwen.com/i14300434/929a38cb8b3dc3a0.png)
指针的关系运算
运算符 | 说明 | 例子 |
---|---|---|
> | 大于 | px > py |
< | 小于 | px < py |
>= | 大于等于 | px >= py |
<= | 小于等于 | px <= py |
!= | 不等于 | px != py |
== | 等于 | px == py |
两指针之间的关系运算表示它们指向的地址位置之间的关系。指向地址大的指针大于指向地址小的指针。
指针与一般整数变量之间的关系运算没有意义。但可以和零进行等于或不等于的关系运算,判断指针是否为空。
![](https://img.haomeiwen.com/i14300434/b80a632fcd86fb85.png)
![](https://img.haomeiwen.com/i14300434/0da93dbd12d34c21.png)
指针与数组
在C语言中,数组的指针是指数组在内存中的起始地址,数组元素的地址是指数组元素在内存中的起始地址
一维数组的数组名为一维数组的指针(起始地址)
设置指针变量px的地址值等于数组指针x(即指针变量px指向数组的首元素)
注意:
指针变量和数组在访问数组中元素时,一定条件下其使用方法具有相同的形式,因为指针变量和数组名都是地址量;但指针变量和数组的指针(或叫数组名)在本质上不同,指针变量是地址
变量,而数组的指针是地址常量。
指针与二维数组
多维数组就是具有两个或两个以上下标的数组,在C语言中,二维数组的元素连续存储,按行优先存
可以把我二维数组看作由多个一维数组组成
二维数组名代表数组的起始地址,数组名加1,是移动一行元素。因此,二维数组名常被称为行地址。
行指针(数组指针)
存储行地址的指针变量,叫做行指针变量。
<存储类型> <数据类型> (*<指针变量名>)[表达式]
方括号中的常量表达式表示指针加1,移动几个数据。
当用行指针操作二维数组时,表达式一般写成1行的元素个数,即列数。
![](https://img.haomeiwen.com/i14300434/30883f561fc1c893.png)
字符指针与字符串
C语言通过使用字符数组来处理字符串
通常,我们把char数据类型的指针变量称为字符指针变量。字符指针变量与字符数组有着密切关系,它也被用来处理字符串。
初始化字符指针是把内存中字符串的首地址赋予指针,并不是把该字符串复制到指针中
在C编程中,当一个字符指针指向一个字符串常量时,不能秀爱指针指针指向的对象的值
![](https://img.haomeiwen.com/i14300434/4a3e085b613711ac.png)
练习:不用任何字符串函数,编程实现字符串连接函数的功能
#include<ctype.h>
int main(int argc, char *argv[])
{
char ch[30] = "hello world";
char *q, *p = "hello world";
int i = 0;
q = p;
while(*(ch+i) != '\0'){
i++;
}
while(*p != '\0'){
*(ch+i) = *p;
i++;
p++;
}
*(ch+i) = *p;
p = q;
puts(ch);
puts(p);
return 0;
}
结果:
![](https://img.haomeiwen.com/i14300434/aea3348a23be5d87.png)
网友评论