这是处理C多维数组导航的正确方法吗
我担心的是,我计算td终点的方法是正确的。这是最优的吗?有更好的C习惯用法来做这类事情吗这是处理C多维数组导航的正确方法吗,c,pointers,C,Pointers,我担心的是,我计算td终点的方法是正确的。这是最优的吗?有更好的C习惯用法来做这类事情吗 #include <stdio.h> int main() { char td[][4] = { {0,1,2,3}, {4,5,6,7}, {8,9,10,11}, {12,13,14,15}, {16,17,18,19}, {20,21,22,23} }; char* p = *td; int rows = s
#include <stdio.h>
int main() {
char td[][4] = { {0,1,2,3}, {4,5,6,7}, {8,9,10,11},
{12,13,14,15}, {16,17,18,19}, {20,21,22,23} };
char* p = *td;
int rows = sizeof(td) / sizeof(td[0]);
int cols = sizeof(td[0]) / sizeof(td[0][0]);
char* end = p + (rows * cols);
/* Print first element in each 'row' */
while(p != end) {
printf("first element: %u\n", p[0]);
p += 4;
}
return 0;
}
#包括
int main(){
char td[][4]={0,1,2,3},{4,5,6,7},{8,9,10,11},
{12,13,14,15}, {16,17,18,19}, {20,21,22,23} };
char*p=*td;
int rows=sizeof(td)/sizeof(td[0]);
int cols=sizeof(td[0])/sizeof(td[0][0]);
char*end=p+(行*cols);
/*打印每个“行”中的第一个元素*/
while(p!=结束){
printf(“第一个元素:%u\n”,p[0]);
p+=4;
}
返回0;
}
人们通常会在C中使用for循环
int main() {
char td[][4] = { {0,1,2,3}, {4,5,6,7}, {8,9,10,11},
{12,13,14,15}, {16,17,18,19}, {20,21,22,23} };
int rows = sizeof(td) / sizeof(td[0]);
int cols = sizeof(td[0]) / sizeof(td[0][0]);
/* Print first element in each 'row' */
for (int row = 0; row < rows; row++)
printf("first element: %u\n", td[row][0]);
return 0;
}
intmain(){
char td[][4]={0,1,2,3},{4,5,6,7},{8,9,10,11},
{12,13,14,15}, {16,17,18,19}, {20,21,22,23} };
int rows=sizeof(td)/sizeof(td[0]);
int cols=sizeof(td[0])/sizeof(td[0][0]);
/*打印每个“行”中的第一个元素*/
对于(int row=0;row
但是,您编写的代码确实有效。在C中通常使用for循环
int main() {
char td[][4] = { {0,1,2,3}, {4,5,6,7}, {8,9,10,11},
{12,13,14,15}, {16,17,18,19}, {20,21,22,23} };
int rows = sizeof(td) / sizeof(td[0]);
int cols = sizeof(td[0]) / sizeof(td[0][0]);
/* Print first element in each 'row' */
for (int row = 0; row < rows; row++)
printf("first element: %u\n", td[row][0]);
return 0;
}
#define COLS 4
int main() {
char td[][COLS] = { {0,1,2,3}, {4,5,6,7}, {8,9,10,11},
{12,13,14,15}, {16,17,18,19}, {20,21,22,23} };
int rows = sizeof(td) / sizeof(td[0]);
/* print the matrix */
for (int row = 0; row < rows; row++) {
for (int col = 0; col < COLS; col++) {
printf("first element: %u\n", td[row][col]);
}
}
return 0;
}
intmain(){
char td[][4]={0,1,2,3},{4,5,6,7},{8,9,10,11},
{12,13,14,15}, {16,17,18,19}, {20,21,22,23} };
int rows=sizeof(td)/sizeof(td[0]);
int cols=sizeof(td[0])/sizeof(td[0][0]);
/*打印每个“行”中的第一个元素*/
对于(int row=0;row
但是,您编写的代码确实有效。\code>#定义COLS 4
#define COLS 4
int main() {
char td[][COLS] = { {0,1,2,3}, {4,5,6,7}, {8,9,10,11},
{12,13,14,15}, {16,17,18,19}, {20,21,22,23} };
int rows = sizeof(td) / sizeof(td[0]);
/* print the matrix */
for (int row = 0; row < rows; row++) {
for (int col = 0; col < COLS; col++) {
printf("first element: %u\n", td[row][col]);
}
}
return 0;
}
int main(){
char td[][COLS]={0,1,2,3},{4,5,6,7},{8,9,10,11},
{12,13,14,15}, {16,17,18,19}, {20,21,22,23} };
int rows=sizeof(td)/sizeof(td[0]);
/*打印矩阵*/
对于(int row=0;row for (int row = 0; row < rows; row++) {
printf("first element: %u\n", td[row][0]);
}
for(int row=0;row
#定义COLS 4
int main(){
char td[][COLS]={0,1,2,3},{4,5,6,7},{8,9,10,11},
{12,13,14,15}, {16,17,18,19}, {20,21,22,23} };
int rows=sizeof(td)/sizeof(td[0]);
/*打印矩阵*/
对于(int row=0;row
对于每行的第一列:
for (int row = 0; row < rows; row++) {
printf("first element: %u\n", td[row][0]);
}
for(int row=0;row
正确的方式意味着什么?这是一种方法,但并不简单,出现错误的可能性更大。(这可能是正确的,但并不可取)这就是你所有其他帖子背后的原因吗?只需通过td[0][0]、td[1][0]等引用您的数据,这样做没有问题。计算td[1]所需的时间比将p增加4所需的时间要少。这当然是一种方法,但却是一种更为迟钝的方法。在索引上使用双for
循环将更清晰、更简洁、更不容易出错。您关注的是性能吗?因为有很多方法可以做到这一点。请注意,如果您关心速度/效率,指针p[]
和td[]][]
都同样好,但是td[][]
非常简单。正确的方法是什么?这是一种方法,但并不简单,出现错误的可能性更大。(这可能是正确的,但并不可取)这就是你所有其他帖子背后的原因吗?只需通过td[0][0]、td[1][0]等引用您的数据,这样做没有问题。计算td[1]所需的时间比将p增加4所需的时间要少。这当然是一种方法,但却是一种更为迟钝的方法。在索引上使用双for
循环将更清晰、更简洁、更不容易出错。您关注的是性能吗?因为有很多方法可以做到这一点。请注意,如果你关心速度/效率,指针p[]
和td[]][]
都同样好,但是td[][]
非常简单。不再需要p+=4
了。我明白你的意思是:清晰。有了Mbrach的COL定义,下面是的,这可能更好看。不再需要p+=4
。我明白你的意思了:清晰。使用MBRACH的COLS define DOWN是的,这看起来可能更好。为什么要在列中循环打印每行的第一个元素<代码>printf(“第一个元素:%u\n”,td[row][0])代码>就足够了。@VarunLakkur很抱歉,我在打印每一列时都做了说明。我将添加这种情况。为什么要循环遍历列以打印每行的第一个元素<代码>printf(“第一个元素:%u\n”,td[row][0])代码>就足够了。@VarunLakkur很抱歉,我在打印每一列时都做了说明。我要补充一点。