**a[3][4],(**a)[3][4], *(*a)[3][4], *(*a[3])[4]等变量占用的内存
来源:互联网 发布:微信小程序服务器php 编辑:程序博客网 时间:2024/06/05 19:43
今天发现一个一个关于二级指针的内存占用问题:**a[3][4],(**a)[3][4], *(*a)[3][4], *(*a[3])[4]等变量占用的内存字节大小。自己在VS2010 win32平台上运行了一下,看到了有趣的答案,然后百度了一下,发现答案错的不少,也许是控制台不一样。下面是代码片段和运行结果:
#include <algorithm>#include <iostream>using namespace std;int main(){double **a1[3][4];double (**a2)[3][4];double *(*a3)[3][4];double *(*a4[3])[4];double *(**a5[2][3])[4];cout <<sizeof(a1) << endl<<sizeof(a2) << endl<<sizeof(a3) << endl<<sizeof(a4) << endl<<sizeof(a5)<< endl;return 0;}
解释原因如下:
在32位平台下,指针占用内存的大小为4个字节,然后查了一下,()和[]的优先级一样,结合性是从左到右,都比*优先级高。就例子中变量a1-a5中()在左,优先级先于[],所以,最终指针的个数为()中指针的个数。如,变量a1,[]优先级高于*,所以最后的指针个数为3*4=12,内存占用为:12*4=48;变量a2和a3中()中的指针个数为1,所以最后的内存占用为:1*4=4;变量a4中()中的指针个数为3个,所以最后的内存占用为:3*4=12;同理a5为:2*3*4 = 24。
阅读全文
0 0
- **a[3][4],(**a)[3][4], *(*a)[3][4], *(*a[3])[4]等变量占用的内存
- int *(*a)[3][4]
- 逗号表达式 result = (a+4,b+3,a+b) ...result = a+b;
- 4A
- 4A
- 3A
- a page a day 4
- a page a day 3
- 腾讯2016研发工程师在线模拟笔试题----32位系统中,定义**a[3][4],则变量占用内存空间为()。
- Camera 的3A
- 已知int a[]={1,2,3,4,5};int*p[]={a,a+1,a+2,a+3};int **q=p;表达式*(p[0]+1)+**(q+2)的值是____。
- 使用Java语言,使用System.in输入以下各个变量的值,并按照公式计算得出结果。 公式为: 4/3*(r+34)-9*(a+b*c)+(3+d*(2+a))/(a+b*d)
- 矩阵求A^k,A+A^2+A^3+……A^k
- int a,b; a=077; b=a|3;
- 输出一个全排列,或排列,如,给定"1234" 输出 A-4-4 A-4-3 等排列中的所有元素
- int a[5]={1,2,3,4,5};printf("%d\n", *((int*)(&a+1)-2);
- C语言 a+=4 和 a++
- int *ptr=(int *)(&a+1) 与int a[5]={1,2,3,4,5} 指针的变动
- 程序优化——C/C++参数优化
- 2017阿里巴巴校招在线笔试——货架格子编号
- Netty4.0学习笔记系列之四:混合使用coder和handler
- GIT-子模块
- Mybatis association与collection关联查询
- **a[3][4],(**a)[3][4], *(*a)[3][4], *(*a[3])[4]等变量占用的内存
- html,css,js代码加载顺序问题
- java 获取kafka offsets(偏移量)
- Netty4.0学习笔记系列之五:自定义通讯协议
- Java中的装箱和拆箱
- 导航栏,利用bootstrap做导航栏
- 利用Miniflow创建一个深度神经网络
- Python CGI 初体验
- UVA11584