在c中用指针编写函数

writing function with pointers in c

我写了这段代码:

#include <stdio.h>
void transpose(int *Al[]){
int x=0;
int z=0;
int k=1;
while (*Al[z] != "[=10=]") {
    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 中有多少数组,这样我就可以知道我应该打印多少列。有解决办法吗?

while循环中的条件

while (*Al[z] != "[=10=]") {

没有意义。表达式 *Al[z] 的类型为 int 而字符串文字 "[=16=]" 的类型为 char *.

也不清楚为什么在这个循环中出现幻数6

for(int o=0;o<6;o++){

不需要显式计算列数,因为标记值等于 NULL

我可以建议例如以下解决方案

#include <stdio.h>

void transpose( int * Al[] )
{
    int rows = 0;
    
    for ( int **p = Al; *p != NULL; ++p )
    {
        if ( rows < **p ) rows = **p;
    }
    
    if ( rows ) --rows;
    
    for ( int i = 0; i < rows; i++ )
    {
        for ( int **p = Al; *p != NULL; ++p )
        {
            if ( i + 1 < **p ) printf( "%2d ", *( *p + i + 1 ) );
            else printf( "   " );
        }
        
        putchar( '\n' );
    }
    
}

int main(void) 
{
    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 );
   
    return 0;
}

程序输出为

-5  6  1  2 15  4 
14 11 -3  7    -2 
 5     4  1       
 2        8       
          2