作者KanzakiHAria (神崎・H・アリア)
看板C_and_CPP
标题Re: [问题] 2D array的address
时间Mon Apr 23 12:50:37 2018
《21世纪C语言》书中提供一个直观的看法。以解析原理来看推荐*偏右。
int a = 2;
int *b = &a;
int c[3];
int d[2][3][4];
结果 a 和 *b 是 int ,同样的逻辑 c[1] 和 d[1][2][3] 是 int
因为历史包袱,取值的方法有一堆手段,千万不要写成以下任何一行的糟糕程式码:
int AAA = *c;
int BBB = *(int*)(void*)d;
int CCC = b[0];
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.36.65.143
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1524459040.A.88C.html
1F:→ Lipraxde: b[0] ← 这样用很糟糕是因为a不是阵列的关系? 04/23 19:54
对 可能造成後面的人接着写出b[1]而产生错误 比*c後果更糟糕
clean code的观念就是好的程式码会让後面的程式码保持整洁
脏的程式码会引出更多脏的程式码 软体工程普遍认为越多脏程式码错误率越高
※ 编辑: KanzakiHAria (114.36.67.138), 04/23/2018 21:43:51
2F:→ Lipraxde: 这样做动态阵列不就颇麻烦的 04/24 00:04
3F:推 LPH66: 这是在 int *b = &a; 之下的建议, 动态阵列是不一样的东西 04/24 02:55
4F:→ LPH66: 这其实正是「指标不等於阵列」的真意: 04/24 02:55
5F:→ LPH66: 它底下是什麽东西就要用什麽介面去存取 04/24 02:55
6F:→ LPH66: 当 b 是指向一个变数时用 * 存取, 指向阵列开头时才用 [] 04/24 02:56
7F:→ Lipraxde: 原来是在说这个啊,感谢 04/24 10:20