龙空技术网

C语言的灵魂:指针,它还可以运算,你知道吗?

盘哥盘点 46

前言:

当前你们对“c语言指针的运算”大约比较注意,你们都需要了解一些“c语言指针的运算”的相关知识。那么小编也在网络上汇集了一些对于“c语言指针的运算””的相关资讯,希望你们能喜欢,看官们一起来了解一下吧!

盘天盘地盘空气,万物皆可盘,今天盘哥就来盘点一下有关c语言指针的运算那些事儿。指针是C语言的灵魂,初学C语言的小伙伴们想必已经不知道听过多少遍了吧。

大家都知道指针其实是地址,是无符号类型的整型数据。数据都可以进行算术运算,那么指针可以吗?多说无益,直接上干货!可以直接跳到最后看总结哦!

一.赋值运算 这是最基础的知识,先复习一下吧![机智]

# include <stdio.h>

int main(void) {

int x=10,*p;

p=&x;//p=&x等价于p=a;

printf("*p=%d\n",*p);

return 0;

}

运行结果:*p=10;

二.加减运算

# include <stdio.h>

int main(void) {

int a[5]={1,2,3,4,5},*p;

p = a;//将指针p指向数组a;

printf("%d\n",*p);//此时*p=a[0]

p = p + 1;//进行加运算

printf("%d\n",*p);//此时*p指向a[1]

p = p - 1;//进行减运算

printf("%d\n",*p);//此时*p指向原处a[0]

return 0;

}

运行结果:

1

2

1

自增自减运算类似的哦,比如:p++等价于p=p+1,p--等价于p=p-1

知识点 :指针变量p可以使用加减运算使其指向后面或前面的元素,主要用于数组元素的引用,需要注意下标的有效范围。不能对指针变量进行乘法、除法、取余等其他运算,除了会发生语法错误,也没有实际的含义。

三.指针相减运算 准备好了吗?发车了奥!

#include <stdio.h>

int main(void){

int a[]={12, 22, 34, 44, 53, 63};

int *m = &a[1];

int *n = &a[4];

printf("n-m=%d\n", n-m);

return 0;

}

运算结果:n-m=3

知识点:两指针相减运算可以求两地址的间距,从而得到两指针间元素的个数

注意:两指针相减运算要求两指针类型相同,并指向相同的连续储存区域,两指针间相加运算无实际意思,不同类型的指针不允许相加减。

四.关系运算

例:p,q为两个指针变量

p=q 表示两者指向同一内存单元

p>q 表示p处于高地址位置

p<q 表示p处于低地址位置

知识点:当对指针变量进行比较运算时,比较的是指针变量本身的值,也就是数据的地址。如果地址相等,那么两个指针就指向同一份数据,否则就指向不同的数据。

最后总结一下:

指针的算术运算一般用于操作数组,因为数组是连续的内存空间。假如对不连续的单个变量地址进行加法或减法运算,然后改变其运算后地址的值,有可能破坏该地址的数据。而程序分配给数组的内存空间是连续可用的地址,不用担心这个问题。

一:指针变量除了最基本的赋值运算以外还可以使用加减运算使其指向后面或前面的元素,主要用于数组元素的引用,需要注意下标的有效范围。不能对指针变量进行乘法、除法、取余等其他运算,除了会发生语法错误,也没有实际的含义。

二:两指针减法运算可以求两地址的间距,从而得到两指针间元素的个数,但是要求两指针相减运算时两指针类型相同,并指向相同的连续储存区域,一般用于数组。 两指针间不能进行加法运算,这是非法操作,因为加法以后得到的结果指向一个不知道的地方,且无实际意义。不同类型的指针不允许相加减。

三:相同类型的指针之间的关系运算可以判断这两个指针是否指向同一个地址。不同类型指针之间的关系运算没有任何意义,指针和非0整数的关系运算没有任何意义,但是指针可以和0进行关系运算。

仅为本人学习C语言的学习总结,如果有不对的地方欢迎大佬评论指出不足之处,萌新定会认真查看吸收意见。也可以欢迎讨论有关c语言的各类学习问题,加油吧,学习c语言的小伙伴们,冲冲冲!

标签: #c语言指针的运算