首页 > 后端开发 > C++ > C 中 `*ptr`、`*ptr`、`*ptr` 和 `(*ptr)` 有什么区别?

C 中 `*ptr`、`*ptr`、`*ptr` 和 `(*ptr)` 有什么区别?

Linda Hamilton
发布: 2024-12-11 03:03:12
原创
908 人浏览过

What's the Difference Between `*ptr  `, `*  ptr`, `  *ptr`, and `(*ptr)  ` in C?

指针表达式:导航 ptr 、 ptr 和 *ptr

这些指针表达式在 C 编程中经常遇到并且可能很难理解。详细解释如下:

1. *ptr

  • 优先级: *(间接)的优先级高于(增量)。
  • 表达式值: 计算到 ptr 之前指向的值递增。
  • 副作用: 将 ptr 增加一个内存单位。

示例:

int a = 5;
int *ptr = &a;

*ptr++; // evaluates to 5, then increments ptr to point to the next integer
登录后复制

2. * ptr

  • 优先级:(增量)和 *(间接)具有相同的优先级。
  • 表达式值: 求值到 ptr 之后指向的值递增。
  • 副作用: 将 ptr 增加一个内存单位。

示例:

int a = 5;
int *ptr = &a;

*++ptr; // evaluates to 6 (a++) and increments ptr
登录后复制

3. *ptr

  • 优先级:(增量)和 *(间接)具有相同的优先级。
  • 关联性: 右-向左。
  • 表达式值: 增加 ptr 指向的值。
  • 副作用: 无。

示例:

int a = 5;
int *ptr = &a;

++*ptr; // increments a to 6
登录后复制

4. (*ptr)

  • 优先级: 括号覆盖优先级规则。
  • 表达式值: 计算为取消引用的值递增之前的 ptr。
  • 侧面效果: 增加解除引用的值。

示例:

int a = 5;
int *ptr = &a;

(*ptr)++; // evaluates to 5, then increments *ptr to 6
登录后复制

请注意,ptr、 ptr 和 ptr 可能会崩溃,如果ptr 是一个数组标识符,而如果 ptr 指向字符串,则 (ptr) 可能会崩溃字面意思。

以上是C 中 `*ptr`、`*ptr`、`*ptr` 和 `(*ptr)` 有什么区别?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板