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。

另外

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

总结

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

相关文章

  • Qt实现部件透明及阴影效果的示例代码

    Qt实现部件透明及阴影效果的示例代码

    本文主要介绍了Qt实现部件透明及阴影效果的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • C++实现inline hook的原理及应用实例

    C++实现inline hook的原理及应用实例

    这篇文章主要介绍了C++实现inline hook的原理及应用,需要的朋友可以参考下
    2014-08-08
  • C++通过CryptoPP计算Hash值的过程详解

    C++通过CryptoPP计算Hash值的过程详解

    Crypto++ (CryptoPP) 是一个用于密码学和加密的C++库,它是一个开源项目,提供了大量的密码学算法和功能,本文小编给大家介绍了C++通过CryptoPP计算Hash值的过程,文中通过代码示例给大家介绍的非常详细,需要的朋友可以参考下
    2023-11-11
  • C语言中的for循环语句基本语法及使用

    C语言中的for循环语句基本语法及使用

    这篇文章主要介绍了C语言中的for循环语句基本语法及使用,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06
  • C语言实现冒泡排序算法的示例详解

    C语言实现冒泡排序算法的示例详解

    这篇文章主要介绍了C语言如何实现冒泡排序算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • C++中检查vector是否包含给定元素的几种方式详解

    C++中检查vector是否包含给定元素的几种方式详解

    这篇文章主要介绍了C++中检查vector是否包含给定元素的几种方式,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • C语言中如何利用循环嵌套输出一个菱形

    C语言中如何利用循环嵌套输出一个菱形

    这篇文章主要介绍了C语言中如何利用循环嵌套输出一个菱形问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • C语言实现去除字符串中空格的简单实例

    C语言实现去除字符串中空格的简单实例

    下面小编就为大家带来一篇C语言实现去除字符串中空格的简单实例。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05
  • C语言实现简易通讯录(静态版本)的代码分享

    C语言实现简易通讯录(静态版本)的代码分享

    这篇文章主要为大家详细介绍了如何录音C语言实现一个简易的通讯录(静态版本),文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-10-10
  • C++ QT实现获取本机网卡信息

    C++ QT实现获取本机网卡信息

    这篇文章主要为大家详细介绍了如何利用qt自带的QNetworkInterface接口以及c++Iphlpapi库,获取当前windows电脑下的网卡信息,需要的可以参考下
    2024-01-01

最新评论