我知道如何在C中使用一维数组的指针。如下所示: 但是如果我们有二维数组怎么办?我如何通过指针解决它们? 谢谢。
#include <stdio.h>
int main() {
int dar[4] = {1,2,3,4};
int *sar = NULL;
sar = dar;
for (int i = 0; i < 4; i++) {
printf("%d ", *(sar + i));
}
}
答案 0 :(得分:1)
这也可能有帮助。
public static Expression<Func<T, bool>> AndIf<T>(this Expression<Func<T, bool>> expr1, bool condition,
Expression<Func<T, bool>> expr2)
{
var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());
if (condition)
return Expression.Lambda<Func<T, bool>>(Expression.AndAlso(expr1.Body, invokedExpr), expr1.Parameters);
else
return expr1;
}
}
答案 1 :(得分:0)
感谢@Qubit 我解决了问题。我将答案发布给以后参考。
#include <stdio.h>
int main() {
int dar[2][3] = {{1,2,3},
{4,5,6}};
int *sar = NULL;
int *bar = NULL;
sar = dar[0];
bar = dar[1];
for (int i = 0; i < 3; i++) {
printf("%d ", *(sar+i));
}
printf("\n");
for (int j = 0; j < 3; j++) {
printf("%d ",*(bar+j));
}
printf("\n");
}
答案 2 :(得分:0)
2-D数组是...一维数组的一维数组,您可以在两者上使用通用指针算术。
这意味着您可以轻松做到:
#include <stdio.h>
int main() {
int dar[2][3] = {{1,2,3},
{4,5,6}};
for (int i = 0; i < 2; i++) {
int *bar = *(dar + i); // pointer to the row
for (int j = 0; j < 3; j++) {
printf("%d ",*(bar+j)); // access the values
}
printf("\n");
}
printf("\n");
}
之所以有效,是因为dar + i
中的dar
衰减到了指向其第一行的指针,因此*(dar + 1)
(根据定义为dar[i]
)代表了i-第一行,然后衰减到指向该行第一个元素的指针。
免责声明:这只是JJcopl回答的补充,但内容太丰富,无法放入评论中……