当前位置: 首页 > 编程笔记 >

C语言相同的星号,不同的含义

郑正文
2023-03-14
本文向大家介绍C语言相同的星号,不同的含义,包括了C语言相同的星号,不同的含义的使用技巧和注意事项,需要的朋友参考一下

示例

前提

关于C和C ++中的指针语法,最令人困惑的事情是,当指针符号星号(*)与变量一起使用时,实际上存在两种不同的含义。

示例

首先,您可以使用*来声明一个指针变量

int i = 5;
/* 'p' is a pointer to an integer, initialized as NULL */
int *p = NULL;
/* '&i' evaluates into address of 'i', which then assigned to 'p' */
p = &i;
/* 'p' is now holding the address of 'i' */

当您不声明(或乘)时,*用于取消引用指针变量:

*p = 123;
/* 'p' was pointing to 'i', so this changes value of 'i' to 123 */

当您希望现有的指针变量保存其他变量的地址时,不要使用*,而是这样做:

p = &another_variable;

当C编程新手同时声明并初始化一个指针变量时,就会出现一个普遍的困惑。

int *p = &i;

由于int i = 5;和int i; i = 5;给出相同的结果,因此其中一些人可能也会想到int *p = &i;并int *p; *p = &i;给出相同的结果。事实是,否,int *p; *p = &i;将尝试引用未初始化的指针,这将导致UB。*不声明或取消引用指针时,切勿使用。

结论

星号(*)在C中与指针有关有两种不同的含义,具体取决于使用的位置。当一个内使用的变量声明,在等号侧的右手侧的值应该是一个指针值到一个地址在存储器中。当与已经声明的变量一起使用时,星号将取消引用指针值,将其跟随到内存中的指向位置,并允许分配或检索存储在其中的值。

带走

可以这么说,在处理指针时,一定要注意您的P和Q。请注意何时使用星号,以及在星号上使用星号的含义。忽略此微小的细节可能会导致错误和/或不确定的行为,而您实际上并不想处理这些行为。

 类似资料:
  • 在C和C中都有效但具有不同语义学的语法示例是什么?换句话说,使用C和C编译器编译时产生不同输出的程序示例是什么?

  • Go 语言程序组成 和C语言程序一样,Go语言程序也是由众多函数组成的 和C语言程序一样,程序运行时系统会自动调用名称叫做 main 的函数 和C语言程序一样,如果一个程序没有主函数,则这个程序不具备运行能力 和C语言程序一样,一个 Go 语言程序有且只能有一个主函数 Go 语言程序主函数定义格式 C 语言 main 函数格式 int main(int argc, const char * arg

  • 问题内容: 我很好奇,Python编程中的三个不同括号是什么意思?不知道我是否正确,但是如果我错了,请纠正我: 或者,如果这些支架可用于其他用途,欢迎提供任何建议!谢谢! 问题答案: :用于定义可变数据类型-列表,列表推导以及索引/查找/切片。 :定义元组,操作顺序,生成器表达式,函数调用和其他语法。 :两种哈希表类型-字典和集合。

  • 本文向大家介绍C# DateTime.ToString根据不同语言生成相应的时间格式,包括了C# DateTime.ToString根据不同语言生成相应的时间格式的使用技巧和注意事项,需要的朋友参考一下 我想大家对DateTime.ToString()方法的用法肯定已经非常熟悉了,但我想大家用过的大部分用法都是:DateTime.ToString(“format”),不过本文想讲述的是它的另一个重

  • 假设数组A:1,2,3,1,1,3。不同的整数应在数组B中:1,2,3。然后,函数应打印:[1,1][1,2][1,3][2,1][2,2][2,3][3,1][3,2][3,3]。 我试图解决不重复的整数问题,但没有递归 但问题是我必须以递归的方式解决它,有什么想法吗?

  • 本文向大家介绍Objective-C语言查找数组的不同对象ID,包括了Objective-C语言查找数组的不同对象ID的使用技巧和注意事项,需要的朋友参考一下 示例