gpt4 book ai didi

c - a = & b vs *a = & b — 指针赋值

转载 作者:太空狗 更新时间:2023-10-29 17:04:24 24 4
gpt4 key购买 nike

我有一个指针和一个变量:

int *a;
int b;

赋值有区别吗

a = &b;

*a = &b;

它们叫什么(比如指针声明之类的)?

最佳答案

类型很重要。

  • a=&b 的情况下,赋值是有效的。您将一个整数(类型:int *)的地址分配给另一个类型为 int * 的变量,所以这是合法的。

  • *a=&b 的情况下,这是一个约束违规(对于赋值运算符,请参阅章节 §6.5.16.1/p1,约束,用于简单赋值),因此不是有效 C 语法,因此不需要由任何符合标准的编译器编译。为了使其成为有效的 C 语法,我们需要强制一个类型转换,比如

    *a= (int) &b;

    将使它成为满足所需约束的语法有效 C 语句。

    即使在那之后,结果也是实现定义的。#note 在这里,您基本上是在尝试分配一个整数的地址(类型:int * ) 到另一个 int 类型的变量(*aint 类型)。从指针到整数的转换是实现定义的行为。

    引用 C11,章节 §6.3.2.3,指针

    Any pointer type may be converted to an integer type. Except as previously specified, the result is implementation-defined. If the result cannot be represented in the integer type, the behavior is undefined. [....]

[....] And what are they called?

都是赋值语句。


注意:

考虑到 a 已经指向一个有效的内存位置。否则,取消引用无效指针会调用 undefined behavior靠自己。

关于c - a = & b vs *a = & b — 指针赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41423986/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com