作者archon (三脚猫的把戏)
看板C_and_CPP
标题Re: [语法] 关於 typedef 简化 多维Arrays 的指标...
时间Thu Oct 15 02:35:12 2009
首先,感谢阿蓉的爱前辈,我觉得我可能有多了解 typedef 一点点,
但我还是想再多问一些观念...
我试着改写了一下程式:
==========================================================
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
int main()
{
int ia[3][4] = {0,1,2,3,4,5,6,7,8,9,10,11};
typedef int (*array_ptr)[4]; // 这两行是修改的部份
array_ptr ap = ia; // 我把指标移入了 typedef 中
for(int i=0;i<4;i++)
cout << (*ap)[i] << " "; // 这里是 access 第一行四个元素的程式
// 执行结果会是 0 1 2 3
cout << endl;
system("pause");
return 0;
}
==========================================================
在 array_ptr 宣告的那一句,整个丢进去上面那行然後去掉typedef,
的确就套进去了,但是,如果套到另一个常见的 typedef 问题:
typedef int* intP;
const intP p2;
又有点儿套不好,他是 int* const p2 的意思...
typedef 後头接的型态 (int *),就是用 intP 宣告会产生的型态,
而使用 typedef 後的自订型态来宣告,还可以透过 const 或 * 再进一步修饰,
经由多个例子的归纳,我似乎可以感应到 typedef 各种用法的意思,
但是它究竟实际上的运作全貌,却还是很模糊...
#define、macro,跟 typedef 之间决定性的不同,到底该怎麽说清楚呢 /"\a?
※ 引述《QQ29 (我爱阿蓉)》之铭言:
: 其实之前一直把typedef看成类似 define这样字串取代
: 结果只能看懂简单的
: typedef int INT;
: http://ehome.hifly.to/showthread.php?s=&threadid=132
: 看了这网页的例子
: 以後看到typedef都把它看成
: typedef int int_array[4]; ←
: int_array *ip = ia;
: ^^^^整个丢进去上面那行 然後去掉typedef
: 就变成 int (*ip)[4]; 其实就是你写的那样了
: 这个看法所有奇怪的typedef都可以这样套进去
: 还满好理解的..
: ※ 引述《archon (三脚猫的把戏)》之铭言:
: : int ia[3][4];
: : int (*ip)[4] = ia;
: : ip = &ia[2];
: : 以上的语法我觉得是蛮直觉的,但是...
: : typedef int int_array[4]; ←
: : int_array *ip = ia;
: : 我始终对 typedef 那一行很困惑...
: : 为什麽它不是 typedef int[4] int_array; 呢...
: : 这个玩意儿,是本来就如此,还是说可以有一个比较令人心安的解释呢...
: : 小的斗胆,有请各位大大解惑... <(_ _)>
--
追根究底所得到的东西,是失望的观众,以及狼狈的魔术师...
De'Ring Practice
http://www.wretch.cc/blog/miauwally/21246514
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.24.8.187
1F:推 QQ29:typedef真的不是macro 不要那样想 会很死 10/15 03:57
2F:推 Ebergies:我想推「感应到 typedef 各种用法的意思」lol 10/15 09:44