【发布时间】:2023-03-24 07:05:01
【问题描述】:
我写了这段代码:
#include <stdio.h>
void transpose(int *Al[]){
int x=0;
int z=0;
int k=1;
while (*Al[z] != "\0") {
int c=*Al[z];
if (c>x)
x=c;
z++;
}
printf("%d ",x);
for(int o=0;o<6;o++){
for(int i=0 ;i<x;i++ ) {
int *p = Al[i];
int l=*p;
if(k<l)
printf("%d ",*(p+k));
else
printf(" ");
}
k++;
printf("\n");
}
}
int main() {
int A[] = {5, -5, 14, 5, 2};
int B[] = {3, 6, 11};
int C[] = {4, 1, -3, 4};
int D[] = {6, 2, 7, 1, 8, 2};
int E[] = {2, 15};
int F[] = {3, 4, -2};
int *All[] = {A, B, C, D, E, F, NULL};
transpose(All);
}
函数获取指向不同数组的数组我需要使用指针打印数组 输出应该是:
-5 6 1 2 15 4
14 11 -3 7 -2
5 4 1
2 8
2
但是这段代码不打印任何东西。 它指向第一个值的数组也是数组的大小。 我试过这个:
void transpose(int *Al[]){
int x=0;
int z=0;
int k=1;
for(int o=0;o<5;o++){
for(int i=0 ;i<6;i++ ) {
int *p = Al[i];
int l=*p;
if(k<l)
printf("%d ",*(p+k));
else
printf(" ");
}
k++;
printf("\n");
}
}
只有我需要替换循环中的五个和六个 5 是所有数组中最大的大小 -1 所以我会知道要打印多少行,而 6 是 All 中的多少个数组,所以我可以知道我应该打印多少列。有解决办法吗?
【问题讨论】:
-
您的代码如何知道
A、B等有多长?它不能。它们不是以空值终止的,而且你没有考虑它们的大小。试着想出一个你想要如何处理它的设计。 -
此外,您的示例输出中缺少每个
A、B等数组的第一个值。这是故意的吗? -
你认为
while (*Al[z] != "\0") {...是做什么的?您正在将int值与字符串文字的地址进行比较。 -
while (*Al[z] != "\0")你的编译器是否警告过你这行?如果没有,您需要将其丢弃并获得更好的编译器。如果是,在询问其他任何内容之前,您需要询问警告、它的含义以及如何解决它。更好的是,启用编译器选项以将所有警告视为错误,请参阅here -
只需将
while (*Al[z] != "\0") {更改为while (Al[z] != NULL) {似乎 即可修复代码。输出中有一些有趣的间距,但数字是你说你应该得到的。
标签: arrays c loops pointers function-definition