gpt4 book ai didi

c - 在 C 中返回数组的数组

转载 作者:行者123 更新时间:2023-11-30 15:25:48 25 4
gpt4 key购买 nike

我有以下代码,运行良好

#include <stdlib.h>
void transpose();


void main(){
transpose();

}

void transpose() {
int arr[] = {2, 3, 4, 1};
int l = sizeof (arr) / sizeof (arr[0]);
int i, j, k;
for (i = 0; i < l; i++) {
j = (i + 1) % l;
int copy[l];
for (k = 0; k < l; k++)
copy[k] = arr[k];
int t = copy[i];
copy[i] = copy[j];
copy[j] = t;
printf("{%d, %d, %d, %d}\n", copy[0], copy[1], copy[2], copy[3]);
}
}

但是我想要做的是,将一个数组传递给转置函数,转置函数将返回数组列表。

所以我尝试了以下代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void print_array(int a[], int num_elements);

void main(){
int b[16];
int a[] = {2, 3, 4, 1};
c= transpose(a);
print_array(c,16);
}

int transpose(int arr) {
//int arr[] = {2, 3, 4, 1};
int b[16];
int l = sizeof (arr) / sizeof (arr[0]);
int i, j, k;
for (i = 0; i < l; i++) {
j = (i + 1) % l;
int copy[l];
for (k = 0; k < l; k++)
copy[k] = arr[k];
int t = copy[i];
copy[i] = copy[j];
copy[j] = t;
printf("{%d, %d, %d, %d}\n", copy[0], copy[1], copy[2], copy[3]);
b=copy;
}
return b;
}


void print_array(int a[], int num_elements)
{
int i;
for(i=0; i<num_elements; i++)
{
printf("%d ", a[i]);
}
printf("\n");
}

但是有些错误。我希望使用指针,那么如何解决这个问题?

我还知道 print_array 函数被定义为打印单个数组,我将修改它以通过 for 循环打印所有数组。这是正确的做法吗?

最佳答案

也许,可以根据您的意愿重写。 (逻辑完整)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void print_array(int **a, int num_elements);
int **transpose(int n, int arr[n]);

int main(){
int a[] = {2, 3, 4, 1};
int **c;
int n = sizeof(a)/sizeof(*a);
int i;

c= transpose(n, a);
print_array(c, n);
//deallocate
for(i=0;i<n;++i)
free(c[i]);
free(c);
return 0;
}

int **transpose(int n, int arr[n]){
int l = n;
int **b = malloc(l * sizeof(*b));//sizeof(*b) : sizeof(int *)
int i, j, k;
for (i = 0; i < l; i++) {
j = (i + 1) % l;
int *copy = malloc(l * sizeof(*copy));//sizeof(int)
for (k = 0; k < l; k++)
copy[k] = arr[k];
int t = copy[i];
copy[i] = copy[j];
copy[j] = t;
//printf("{%d, %d, %d, %d}\n", copy[0], copy[1], copy[2], copy[3]);
b[i] = copy;
}
return b;
}

void print_array(int **a, int num_elements){
int i, j;
for(i=0; i<num_elements; i++){
for(j=0; j<num_elements; j++)
printf("%d ", a[i][j]);
printf("\n");
}
}

关于c - 在 C 中返回数组的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27682909/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com