搜索
查看: 641|回复: 10
打印 上一主题 下一主题

cpc_关于C语言你不知道的10大秘密2

[复制链接]
跳转到指定楼层
楼主
发表于 2017-8-30 19:35:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 赵林 于 2017-8-31 10:43 编辑

昨天的
2017.8.30 秘密2这个应该有些人知道。。。
又是关于数组的
猜猜看,这个能通过编译吗?
[mw_shl_code=c,true]int a[2][3][4][5][3][2];[/mw_shl_code]
虽然少数人知道答案,但多数人都会认为这是一派胡言。
这句话声明了一个“六维数组”,是可以通过编译的。
占用的空间:sizeof(a)==2880。(这是我口算的)
要注意的是,数组不能定义过大
否则虽然通过编译,却会出现类似scanf忘写取址符的问题。
我的机器最多可以定义大小为2097152(2的21次幂)的变量(也就是262144个元素的int型数组)
当然,其他变量也占用空间
这样就要小心,如果定义五维数组,每维都是15个元素,就不行
但虽然三维数组有时会用到(例如100个工人,每个工人每小时组装20个零件,每天组装10个小时,可以用a[100][10][20]记录每个零件的情况),但更高维数组就很少用到
来自 4#
发表于 2017-8-30 19:48:13 | 只看该作者
那你知道为什么吗?
局部变量是在栈申请空间
而静态变量是在堆申请空间
栈的空间远远小于堆
就是这样
推荐
发表于 2017-8-30 20:07:52 | 只看该作者
[mw_shl_code=c,true]#include <stdio.h>
#include <stdlib.h>
#define Print(a) print a = {sizeof(print),printf,system};

typedef struct _print
{
    int size;
        int (*printf)(const char*,...);
    int (*system)(const char*);
}print;
int main()
{
        Print (b);
    b.printf("结构体的size = %d\n",b.size);
        b.system("pause > pause");
        return 0;
}[/mw_shl_code]要不要我再告诉你另一个关于C语言的奥秘:

点评

当然可以,大家都学习一下  发表于 2017-8-30 21:08
推荐
 楼主| 发表于 2017-8-30 19:47:24 | 只看该作者
初学C 发表于 2017-8-30 19:45
[mw_shl_code=c,true]#include
#include
int static a[35][15][15][15][15][15][15];

写错了,是static int。。。。
沙发
发表于 2017-8-30 19:45:09 | 只看该作者
[mw_shl_code=c,true]#include <stdio.h>
#include <stdlib.h>
int static a[35][15][15][15][15][15][15];
int main()
{
        printf("%d\n",sizeof(a));
    a[14][15][15][15][15][15][15] = 15;
        system("pause");
        return 0;
}[/mw_shl_code]好的回复是对人的鼓励。

点评

最好是stadic int。。。  发表于 2017-8-30 19:46
5#
发表于 2017-8-30 19:58:30 | 只看该作者
你要不要试试                    

libclgr.zip

250.53 KB, 下载次数: 4

点评

可以  发表于 2017-8-30 21:08
7#
发表于 2017-10-10 19:51:54 | 只看该作者
不管怎么样a的内存状态和int a[720]是一样的

点评

只是使用更方便  发表于 2017-10-11 18:45
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表