免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: anlrj
打印 上一主题 下一主题

char (* test[4])[7] 定义了什么东西? [复制链接]

论坛徽章:
0
21 [报告]
发表于 2010-03-16 12:39 |只看该作者
回复 19# bsdc


    恩, C语言 其实只有一维数组, 所谓的数组的数组, 只是元素是数组的数组。

论坛徽章:
0
22 [报告]
发表于 2010-03-16 12:56 |只看该作者
回复 14# KBTiller

你看错了吧,我说的是你画的图很好地反应了这个数据结构

论坛徽章:
0
23 [报告]
发表于 2010-03-16 15:05 |只看该作者
指针数组,剥洋葱法分析

论坛徽章:
0
24 [报告]
发表于 2010-03-16 18:52 |只看该作者
本帖最后由 huxk 于 2010-03-16 18:59 编辑

int (*p())[10] 和這個東東比較一下

貌似編譯器解析這個的時候是從左往右 讀入字符,然後 匹配 ( 和 )

*和test結合再和[4]結合  char [10] 結合

论坛徽章:
0
25 [报告]
发表于 2010-03-16 19:21 |只看该作者
回复 22# huangwei0413


是看错了
非常抱歉!
开始不知怎么看成了“没反应这个数据结构”
敬请原谅

论坛徽章:
0
26 [报告]
发表于 2010-03-17 10:27 |只看该作者
#include <stdio.h>
#include <stdlib.h>

int
main ()
{
        char s[7]={'a','b','c','d','e','f','g'};
        char (* test[4])[7]={s, s, s, s};              //第8行
        return 0;
}



$ gcc test.c -o test -g
test.c: In function ‘main’:
test.c:8: warning: initialization from incompatible pointer type
test.c:8: warning: initialization from incompatible pointer type
test.c:8: warning: initialization from incompatible pointer type
test.c:8: warning: initialization from incompatible pointer type
$

论坛徽章:
0
27 [报告]
发表于 2010-03-17 14:57 |只看该作者
  1. char (*ttest[4])[7];

  2. (gdb) p ttest
  3. $1 = {0x80485eb, 0x5d2ff4, 0x80485e0, 0x0}
  4. (gdb) p ttest[0]
  5. $2 = (char (*)[7]) 0x80485eb        这是一个指针,指向有7个元素的char数组
  6. (gdb)
复制代码
如:
  1. char b[7] ;
  2. char (*ttest[4])[7];
  3. ttest[0] = &b;
复制代码

论坛徽章:
0
28 [报告]
发表于 2010-03-17 20:37 |只看该作者
#include <stdio.h>
#include <stdlib.h>

typedef char a[7];
typedef a *b;
typedef b test[4];

int main(int argc, char *argv[])
{
        a aa = {'a','b','c','d','e','f','g'};
        a ab = {'h','i','j','k','l','m','n'};
        a ac = {'o','p','q','r','s','t','u'};
        a ad = {'v','w','x','y','z','2','3'};

        b ba = &aa;
        b bb = &ab;
        b bc = &ac;
        b bd = &ad;

        test test1 = {ba, bb, bc, bd};

        char (* test2[4])[7] = {ba, bb, bc, bd};

        exit(1);
}

char (* test[4])[7]相当于下面test

typedef char a[7];
typedef a *b;
typedef b test[4];

论坛徽章:
0
29 [报告]
发表于 2010-03-18 08:20 |只看该作者
本帖最后由 ypyf3000 于 2010-03-18 08:29 编辑

定义了4*7个char*元素的数组

论坛徽章:
0
30 [报告]
发表于 2010-03-18 10:31 |只看该作者
先考慮這種情況如何

int (*pa)[]   【int *pa[]比較一下,結合性】

如果這種情況明白 那麼int (*pa[])[] ;這樣也應該明白的說 【單個元素 vs 數組定義】

其實這個東西 int array[][];  和上面這些玩意本質是相同的,
不過學習C語言時老師一般不會講的,大家記憶住了,習慣了,並不會去想太多。
至於爲什麽一樣,編譯原理的教科書開篇一般就有講解,去翻翻吧。

哎,編譯原理這東西,頭疼。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP