C语言指针可以相减吗为什么
发布时间:2025-05-18 21:56:34 发布人:远客网络
一、C语言指针可以相减吗为什么
如果两个指针向同一个数组,它们就可以相减,其为结果为两个指针之间的元素数目。仍以本章开头介绍的街道地址的比喻为例,假设我住在第五大街118号,我的邻居住在第五大街124号,每家之间的地址间距是2(在我这一侧用连续的偶数作为街道地址),那么我的邻居家就是我家往前第(124-118)/2(或3)家(我和我的邻居家之间相隔两家,即120号和122号)。指针之间的减法运算和上述方法是相同的。
二、两个指针可以做“+”运算吗
类型相同的两个指针变量之间可以进行<(小于)、=(等于)、-(减法)运算。
1、“<(小于)”运算在两个同类型的指针间可以比较大小,比较原则应该是按照实际内存的高低位比较的
2、“=(等于)”是对于类型相同的两个指针变量之间常规运算。
3、“-(减法)”运算两个相同指针变量相减可以获得在之间相隔的同类型元素个数(在某个类型的数组中的应用)。
4、“+”运算是不可以的,因为两个指针相加什么都得不到,所以规定不允许相加。
空指针是一个特殊的指针,它的值是0,C语言中用符号常量NULL(在stdio.h中定义)表示这个空值,并保证这个值不会是任何变量的地址。空指针对任何指针类型赋值都是合法的。一个指针变量具有空指针值表示当前它没有指向任何有意义的东西。
(void*)类型的指针叫通用指针,可以指向任何的变量,C语言允许直接把任何变量的地址作为指针赋给通用指针。但是需要注意void*不能指向由const修饰的变量。
三、c语言如何计算两个时间相差多少
定义一个结构体实现两个时间的加减
void swap(Time*time1,Time*time2);//大的时间放在前面
Time subtract1(Time*first,Time*second);
Time subtract(Time*first,Time*second);//默认第一个时间比第二个大
while(strcmp(againch,"y")==0||strcmp(againch,"Y")==0)
scanf("%d:%d:%d",&time1.hours,&time1.minutes,&time1.seconds);
printf("-----输入时间格式错误!请重新输入\n");
scanf("%d:%d:%d",&time2.hours,&time2.minutes,&time2.seconds);
printf("-----输入时间格式错误!请重新输入\n");
time3=subtract(&time1,&time2);
// printf("小时格式错误:%d\n",(time.hours>=24||time.hours<0));
// printf("分钟格式错误:%d\n",(time.minutes>=60||time.minutes<0));
// printf("秒格式错误:%d\n",(time.seconds>=60||time.minutes<0));
return((time.hours>24||time.hours<0)||(time.minutes>=60||time.minutes<0)||(time.seconds>=60||time.minutes<0));
printf("%d:%d:%d",time.hours,time.minutes,time.seconds);
//大的时间放到第一个变量,小的时间方法哦第二个变量
void swap(Time*time1,Time*time2)
//保证第一个时间永远大于第二个时间
if(time2->hours>time1->hours)//如果有time
time2->hours^=time1->hours;
time1->hours^=time2->hours;
time2->hours^=time1->hours;
time1->minutes^=time2->minutes;
time2->minutes^=time1->minutes;
time1->minutes^=time2->minutes;
time1->seconds^=time2->seconds;
time2->seconds^=time1->seconds;
time1->seconds^=time2->seconds;
else if(time2->minutes>time1->minutes&&time1->hours==time2->hours)
time1->minutes^=time2->minutes;
time2->minutes^=time1->minutes;
time1->minutes^=time2->minutes;
time1->seconds^=time2->seconds;
time2->seconds^=time1->seconds;
time1->seconds^=time2->seconds;
else if(time2->seconds>time1->seconds&&time1->minutes==time2->minutes)
time1->seconds^=time2->seconds;
time2->seconds^=time1->seconds;
time1->seconds^=time2->seconds;
Time subtract(Time*first,Time*second)//默认第一个时间比第二个大
if(first->seconds>=second->seconds)//如果第一个秒大于或者等于
result.seconds=first->seconds-second->seconds;
first->minutes=first->minutes-1;//借位
first->seconds=first->seconds+60;
result.seconds=first->seconds-second->seconds;
if(first->minutes>=second->minutes)//如果第一个秒大于或者等于
result.minutes=first->minutes-second->minutes;
first->hours=first->hours-1;//借位
first->minutes=first->minutes+60;
result.minutes=first->minutes-second->minutes;
//交换后默认第一个小时会大于第一个,没有借位的情况,不用
result.hours=first->hours-second->hours;
C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制定了一套完整的美国国家标准语法,称为ANSI C,作为C语言最初的标准。目前2011年12月8日,国际标准化组织(ISO)和国际电工委员会(IEC)发布的C11标准是C语言的第三个官方标准,也是C语言的最新标准,该标准更好的支持了汉字函数名和汉字标识符,一定程度上实现了汉字编程。