c – 当我将二维数组作为一维数组读取时显示的内容是什么?
发布时间:2020-12-16 03:48:04 所属栏目:百科 来源:网络整理
导读:我试图理解C处理数组的方式,在这种情况下,通过读取二维数组就好像它是一维数组一样. 鉴于这个简单的C程序 #include stdio.hint main(int argc,char *argv[]){ int array[4][4]; int i,j; for(i = 0; i 4; i++){ for(j = 0; j 4; j++){ array[i][j] = (i+1)*(
我试图理解C处理数组的方式,在这种情况下,通过读取二维数组就好像它是一维数组一样.
鉴于这个简单的C程序 #include <stdio.h> int main(int argc,char *argv[]){ int array[4][4]; int i,j; for(i = 0; i < 4; i++){ for(j = 0; j < 4; j++){ array[i][j] = (i+1)*(j+1); printf("%d ",array[i][j]); } printf("n"); } for(i = 0; i < 16; i++){ printf("%d ",array[i]); } printf("n"); } 我得到了这个奇怪的输出. 1 2 3 4 2 4 6 8 3 6 9 12 4 8 12 16 56319776 56319792 56319808 56319824 56319840 56319856 56319872 56319888 56319904 56319920 56319936 56319952 56319968 56319984 56320000 56320016 在第二个for循环中打印的是什么? 解决方法
简短的回答是“它是垃圾”.它的正式名称是“未定义的行为”,但它实际上是一个任意十进制数字的序列. 长答案有点棘手:你传递的是一维数组的printf地址,它被重新解释为整数.请注意数字是如何分开16的相同步骤.这是系统上四个整数的大小. 如果你想通过一个维度的数组得到原始数字,你可以强制对数组进行不同的重新解释 – 作为指向int的指针: int *ptr = (int*)&array; for(i = 0; i < 16; i++){ printf("%d ",ptr[i]); } 这将生成2D数组中的数字序列,即数组存储在内存中的方式(逐行). Demo on ideone. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- C抱怨将char **值传递给函数,取char const * const * const
- ruby-on-rails – Rails生成错误的复数形式
- C#实现手机拍照并且保存水印照片
- return true在C中返回0
- c# – 注册流程开始时间的最佳方法是什么?
- 基于opencv2.0的haar算法以人脸识别为例的训练分类器xml的方
- 单一职责______开放封闭原则____依赖倒转”原则(DIP)
- cocos2d-x Lua绑定C++ 自定义类到Runtime(Lua-binding)
- ruby-on-rails – Rails:范围:为所有视图和控制器提供方法
- jquery validate和jquery form 插件组合实现验证表单后AJAX