c - 一个空数组如何参与计算?
问题描述
#include <stdio.h>
int f( int *x ) {
*x = 35;
}
int main( int argc, char *argv[] ) {
int p[32];
int *q = p + 5;
f( q );
printf( "%d", p[5] );
return 0;
}
你能解释一下为什么输出是35吗?
我试图通过使用printf("%d", p)
和之后输出 p 的值int p[32]
,它返回了一个-2077686688
.
我认为这只是因为我还没有为p[32]
数组分配任何值,所以它只是返回了一个随机数。
然而,最让我困惑的部分是*q = p + 5
数组怎么能做到这一点?
既然p
数组中没有值,那么它怎么能在这个表达式中只返回它的大小呢?
解决方案
在您的代码中,int p[32]
留出一个大小为 32 的数组,可以使用p
. 当您定义为时q
,p + 5
您将分配q
为指向内存中第 6 个(索引为 1)的元素的指针,从p
指向的位置开始。
当您传递q
tof()
时, at 的值q
设置为35
之前的任何值(未初始化的内存)。由于q
指向与 相同的位置p[5]
,因为那p[5]
是35
由 设置在内存中的位置的值f()
。
推荐阅读
- vba - 无法在 VBA 代码中添加信任链
- laravel - 在 Laravel 中存储复选框和文本区域的最佳实践
- gradle - 有没有办法让 gradle 项目零配置?
- blazor-server-side - Blazor Server - 如何禁用身份注册页面
- testing - TestCafe-BrowserStack 脚本挂起并且在测试页面抛出 500 或“内存不足”等一般错误时不会终止
- c# - Webview 5.11 从本地 Intranet 站点呈现空白窗口,C# WPF
- c# - 如何确定多边形(三角形)的旋转点?
- php - 如何在我的网站上嵌入 Facebook 视频
- file - 如何使用sed提取一个浮点数
- python - spaCy BERT 词典