C语言 解引用变量地址与解引用包含该地址的指针类型的变量相同吗?

1mrurvl1  于 2023-08-03  发布在  其他
关注(0)|答案(2)|浏览(117)

考虑以下代码:

int main(){
   
   
   int a = 10;
   int* p = &a;

   //case 1

   *(&a);
   *p;

   //case 2

   *((&a) + 1);
   *( p + 1 );
   
   
}

字符串
1.这两种形式是一样的吗?
1.Assert指针只是一个“可以”存储在变量中供以后使用的地址,这是正确的吗?
1.当不使用指针变量解引用地址时,是否有一些注意事项?

lf3rwulv

lf3rwulv1#

是的,*p*(&a)完全相同。变量p仅包含a的内存地址。
2.指针只是一个变量,它包含一个被解释为内存地址的数字,最常见的是32位系统的uint32_t和64位系统的uint64_t
3.据我所知没有。两者都是相同的内存地址。

7fyelxc5

7fyelxc52#

在情况1中:
*(&a);取消引用a的地址,从而产生存储在a中的值。
*p;解引用存储在p中的值,该值是a的地址,也导致存储在a中的值。
所以两者都有同样的效果。
类似地,在情况2中:

*((&a) + 1);
*( p + 1 );

字符串
这两个语句有相同的效果,但要注意,a被声明为int类型的变量,而不是数组。因此,这两个语句都有语义错误,并导致未定义的行为。

相关问题