C语言中指针的加减运算方法示例

 更新时间:2019年08月28日 11:06:44   作者:wincent98  
这篇文章主要给大家介绍了关于C语言中指针的加减运算的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用C语言具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

参考文章,值得一看

 char arr[3];
 printf("arr:\n%d\n%d\n%d\n", arr, arr + 1, arr + 2);
 char *parr[3];
 printf("parr:\n%d\n%d\n%d\n", parr, parr + 1, parr + 2);

从结果可以看到,字符数组每个元素占1字节,字符指针数组每个占4字节。

再看一个例子:

 char a = 'a', b = 'b', c = 'c', d = 'd';
 char *arr[20] = {&a,&b,&c,&d};
 char **parr = arr; //arr的类型也是char**
 char *str;
 printf("&a:%d,&b:%d,&c:%d,&d:%d\n", &a, &b, &c, &d);
 printf("&arr[0]:%d,&arr[1]:%d,&arr[2]:%d,&arr[3]:%d\n", &arr[0], &arr[1], &arr[2], &arr[3]);
 printf("arr:%d,parr:%d\n", arr,parr);
 printf("*parr:%d,**parr:%c\n", *parr, **parr);
 str = *parr; //arr[0],char*类型
 printf("----- str=*parr -----\n");
 printf("str:%d,*str:%c\n", str, *str);
 str++; 
 printf("----- str++ -----\n");
 printf("str:%d,*str:%c\n", str, *str);
 
 str = *(parr + 1);
 printf("----- str=*(parr+1) -----\n");
 printf("str:%d,*str:%c\n", str, *str);
 str = *(parr + 2); //*(arr+2*4)
 printf("----- str=*(parr+2) -----\n");
 printf("str:%d,*str:%c\n", str, *str);


指针的加减运算,就是将指针当前值与sizeof(指针指向的类型)相加减。

比如上例中str=*parr,这时str当前值为arr[0],指向的类型是一个字符(所以大小为1字节),str++就代表arr[0]+1*1,但是由于指针数组的每一项占4字节,所以之后的*str输出为?。

再比如上例中str=*(parr+1),指针parr当前值为arr,指向的类型是一个字符指针char*类型(所以大小为4字节),parr+1就代表arr+1*4,向高地址方向移动4个字节,即&arr[0]+4==&arr[1],str就变成了arr[1],所以之后输出的*str为b。

另外

指针和指针进行加减:两个指针不能进行加法运算,这是非法操作,因为进行加法后,得到的结果指向一个不知所向的地方,而且毫无意义。两个指针可以进行减法操作,但必须类型相同,一般用在数组方面,不多说了。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。

相关文章

  • Visual Studio下Eigen库环境配置方式

    Visual Studio下Eigen库环境配置方式

    这篇文章主要介绍了Visual Studio下Eigen库环境配置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • C语言实例上手深入理解操作符的使用

    C语言实例上手深入理解操作符的使用

    C 语言提供了丰富的操作符,有:算术操作符,移位操作符,位操作符,赋值操作符,单目操作符,关系操作符,逻辑操作符,条件操作符等。接下了让我们在实例中练一下
    2022-05-05
  • 深入理解C++内链接与外链接的意义

    深入理解C++内链接与外链接的意义

    链接描述了名称在整个程序或一个翻译单元中如何引用或不引用同一实体,下面这篇文章主要给大家介绍了关于C++内链接与外链接意义的理解,需要的朋友可以参考下
    2021-11-11
  • 使用C语言实现五子棋游戏

    使用C语言实现五子棋游戏

    这篇文章主要为大家详细介绍了使用C语言实现五子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • 关于C++的重载运算符和重载函数

    关于C++的重载运算符和重载函数

    一般来说,重载运算符在实际的项目开发中会经常的用到,但如果某些自定义类型通过简短几行代码重载一些常用的运算符(如:+-*/),就能让编程工作带来方便,需要的朋友可以参考下本文
    2023-05-05
  • 浅析C/C++中的可变参数与默认参数

    浅析C/C++中的可变参数与默认参数

    C支持可变参数的函数,这里的意思是C支持函数带有可变数量的参数,最常见的例子就是我们十分熟悉的printf()系列函数。我们还知道在函数调用时参数是自右向左压栈的
    2013-09-09
  • C++实现主机字节序和网络字节序转换示例

    C++实现主机字节序和网络字节序转换示例

    这篇文章主要为大家介绍了C++实现主机字节序和网络字节序转换示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • C语言字符函数中的isalnum()和iscntrl()你都知道吗

    C语言字符函数中的isalnum()和iscntrl()你都知道吗

    这篇文章主要为大家详细介绍了C语言字符函数中的isalnum()和iscntrl(),文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • C语言数据结构与算法之单链表

    C语言数据结构与算法之单链表

    单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。本文将为大家介绍C语言中单链表的基本概念与读取数据元素,需要的可以参考一下
    2021-12-12
  • 详解C++如何高效利用CPU缓存

    详解C++如何高效利用CPU缓存

    高效利用CPU缓存是编写高性能C++代码的关键之一,所以这篇文章小编主要来和大家介绍一下C++如何实现高效利用CPU缓存,需要的可以参考一下
    2024-02-02

最新评论