如何在C语言中获得二维数组的行大小

如何在C语言中获得二维数组的行大小,c,arrays,C,Arrays,嗨,我正试着做一个桶式的变化。我的程序很简单,因为我是C语言的初学者,但我不知道在输入数字后一行为realloc时如何打印2维数组。我试过intlenght=sizeof(bucket[0])/sizeof(bucket[0][0])但后来lenght=1。我的alternativ解决方案是主要的,它不是非常动态的,因此有人能告诉我如何在2维数组中获得行的大小吗??如果我想在第一个存储桶中添加一个数字,那么该存储桶将太小,因此我将重新定位该存储桶,但我现在如何打印它? 对不起,英语不好:) #包

嗨,我正试着做一个桶式的变化。我的程序很简单,因为我是C语言的初学者,但我不知道在输入数字后一行为realloc时如何打印2维数组。我试过int
lenght=sizeof(bucket[0])/sizeof(bucket[0][0])
但后来
lenght=1
。我的alternativ解决方案是主要的,它不是非常动态的,因此有人能告诉我如何在2维数组中获得行的大小吗??如果我想在第一个存储桶中添加一个数字,那么该存储桶将太小,因此我将重新定位该存储桶,但我现在如何打印它? 对不起,英语不好:)

#包括
#包括
#定义MAXZAHL 50
int compare(const void*a,const void*b){//qsort的比较
返回(*(int*)a-*(int*)b);
}
int**init_bucket(intl,intteile,intteilgr){//初始化bucket
整数**桶;
bucket=(int**)malloc(teile*sizeof(int));
对于(inti=0;isizeof(),应该会这样做,有一个类似的问题,那么,您搜索了吗

如何获得行的大小

当你还知道它的时候,从你储存它的地方读它


在C语言中,您不能从指针派生出它所指向的内存量。

旁注:将
teile*sizeof(int)
更改为
teile*sizeof(int*)
,因为它很可能在64位平台上失败。至于你的问题,你只能在静态分配数组的声明范围内检索维度。我不确定这背后的想法是什么:
bucket[0][n]=(int)realloc(bucket,sizeof(int));
bucket
在此操作后无效,因此
bucket[0]
也是…首先,这应该是一条注释。而
sizeof(somePointer)
将返回的是指针的大小。
#include <stdlib.h>
#include <stdio.h>
#define MAXZAHL 50

int compare(const void * a, const void * b){// compare for the qsort
   return(*(int*)a - *(int*)b);
}

int** init_bucket(int l,int teile,int teilgr){// to init the buckets
    int **bucket;
    bucket=(int**)malloc(teile*sizeof(int));
    for (int i=0;i<teile;i++){
        bucket[i]=(int *)malloc(teilgr*sizeof(int));
    }
    for (int i=0;i<teile;i++){
        for (int j=0;j<teilgr;j++){
            bucket[i][j]=0;
            printf("%3i",bucket[i][j]);
        }
        printf("\n");
    }
    return bucket;
}
void bucket_int(int**bucket,int bucketsize,int nextVal,int n){// to write the   array in the buckets
     int start=bucketsize;
     for (int i=0;i<n;i++){
         if(nextVal< start && bucket[0][i]==0){
             bucket[0][i]=nextVal;
             break;
         }
         if(nextVal< start && bucket[0][i]!=0&& i==n-1){
             bucket[0][n]=(int)realloc(bucket,sizeof(int));
             ++i;
             bucket[0][i]=nextVal;
             break;
         }
         if((nextVal<(start*2)&& nextVal>=(start))&&(bucket[1][i]==0)){
              bucket[1][i]=nextVal;
              break;
         }
         if((nextVal<(start*3)&&nextVal>=(start*2))&&(bucket[2][i]==0)){
              bucket[2][i]=nextVal;
              break;
         }
         if((nextVal<(start*4)&&nextVal>=(start*3))&&(bucket[3][i]==0)){
              bucket[3][i]=nextVal;
              break;
         }
         if((nextVal<(start*5)&&nextVal>=(start*4))&&(bucket[4][i]==0)){
              bucket[4][i]=nextVal;
              break;
         }
    }
 }

int main(){
    int arr[]={3,26,2,10,33,45,20,15,11,9,34,40,19,16,4,5,26,49,1,0,6,8,7,3};
    int len=sizeof(arr)/sizeof(int);//
    int teile=5;
    int teilgr=MAXZAHL/5;
    int **buckets;
    buckets=init_bucket(len,teile,teilgr);
    for (int i=0;i<len;i++){//write the numbers in the buckets
        bucket_int(buckets,teilgr,arr[i],len);
    }
    printf("\n");
    //print Buckets
    for (int i=0;i<teile;i++){
        for (int j=0;j<teilgr;j++){// is there a way to say j<sizeof(buckets)??
            printf("%3i",buckets[i][j]);
        }
        printf("\n");
    }
    //sorting the buckets with qsort
    for (int i=0;i<teile;i++){
        for (int j=0;j<teilgr;j++){
            qsort(buckets[i],teilgr,sizeof(int**),compare);
        }
    }
    printf("\n");
    //print Buckets
    for (int i=0;i<teile;i++){
        for (int j=0;j<teilgr;j++){
            printf("%3i",buckets[i][j]);
        }
        printf("\n");
    }
    printf("\n");
    int f=0;
    //Putting the buckets back to the array
    for (int i=0;i<teile;i++){
        for (int j=0;j<teilgr;j++){
            if (buckets[i][j]!=0){
                arr[f]=buckets[i][j];
                f++;
            }
        }
    }
    printf("The sorted Array:\n");
    for (int i=0;i<len-1;i++){
        printf("%i ",arr[i]);
    }
    printf("\n");
    return EXIT_SUCCESS;
}