考虑以下代码:
int main(){ int a = 10; int* p = &a; //case 1 *(&a); *p; //case 2 *((&a) + 1); *( p + 1 ); }
字符串1.这两种形式是一样的吗?1.Assert指针只是一个“可以”存储在变量中供以后使用的地址,这是正确的吗?1.当不使用指针变量解引用地址时,是否有一些注意事项?
lf3rwulv1#
是的,*p和*(&a)完全相同。变量p仅包含a的内存地址。2.指针只是一个变量,它包含一个被解释为内存地址的数字,最常见的是32位系统的uint32_t和64位系统的uint64_t。3.据我所知没有。两者都是相同的内存地址。
*p
*(&a)
p
a
uint32_t
uint64_t
7fyelxc52#
在情况1中:*(&a);取消引用a的地址,从而产生存储在a中的值。*p;解引用存储在p中的值,该值是a的地址,也导致存储在a中的值。所以两者都有同样的效果。类似地,在情况2中:
*(&a);
*p;
*((&a) + 1); *( p + 1 );
字符串这两个语句有相同的效果,但要注意,a被声明为int类型的变量,而不是数组。因此,这两个语句都有语义错误,并导致未定义的行为。
int
2条答案
按热度按时间lf3rwulv1#
是的,
*p
和*(&a)
完全相同。变量p
仅包含a
的内存地址。2.指针只是一个变量,它包含一个被解释为内存地址的数字,最常见的是32位系统的
uint32_t
和64位系统的uint64_t
。3.据我所知没有。两者都是相同的内存地址。
7fyelxc52#
在情况1中:
*(&a);
取消引用a
的地址,从而产生存储在a
中的值。*p;
解引用存储在p
中的值,该值是a
的地址,也导致存储在a
中的值。所以两者都有同样的效果。
类似地,在情况2中:
字符串
这两个语句有相同的效果,但要注意,
a
被声明为int
类型的变量,而不是数组。因此,这两个语句都有语义错误,并导致未定义的行为。