使用指针处理二维数组是个好主意吗?
for( p = &a[0][0]; p < &a[N][N]; p++){
*p = 0;
}
或者使用索引更好吗?
答案 0 :(得分:4)
表示数组的方式并不能保证指针算法始终有效。鉴于你如何宣布你的二维数组,它可能不是一个问题,但它肯定不是好的风格。
但是,想象一下,数组是动态分配的。像这样:
int **p = malloc(ARR_SIZE * sizeof(*p));
for (i = 0; i < ARR_SIZE; i++) {
p[i] = malloc(ARR_SIZE * sizeof(**p));
}
这是一个二维数组(排序),但不保证分配的内存是连续的,因此会破坏你的循环。
答案 1 :(得分:2)
你应该总是使用索引,除非你完全确定你知道自己在做什么,并且有一个很好的理由为什么你不想为数组使用索引
理解和维护起来要容易得多。如果其他人正在查看您的代码,那么对他们来说会更容易,也更容易出错。指针很棒,但很多人以错误的方式使用它们并滥用它们,使程序难以理解,维护,找到并解决其中的错误。根据我的专业经验,最好不要用指针创建“魔法”,除非你真的必须并且绝对确定你知道你在做什么。
答案 2 :(得分:0)
不,它不是,因为数据可能无法连续存储(上面的代码假定行的第一个元素恰好在前一行的最后一个元素之后开始)。