cuốn sách gpt4 ai đã làm

Tách một mảng int trong hàm C và trả về 2 mảng khác nhau

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 07:45:57 27 4
mua khóa gpt4 Nike

Tôi cố gắng chia một mảng int. Mảng chứa số dương và số âm và tôi muốn hàm trả về 2 mảng, một mảng cho số dương và một mảng cho số âm.

Tôi đã thử đoạn mã sau nhưng nó không hoạt động như mong đợi.

 int main(void)
{
mảng int[] = {1, -1, 2, 3, 4, -5, 6};
int cnt = sizeof(mảng)/sizeof(mảng[0]);
int *neg, *pos;
int **thấp = &neg;
int **cao = &pos;

neg = (int*) malloc(sizeof(int) * 2);
pos = (int*) malloc(sizeof(int) * 5);

sắp xếp (mảng, cnt, thấp, cao);

for(int i = 0; i < 5; i++)
{
printf("%3d\n", pos[i]);
}

// tương tự cho mảng âm

return 0;

}

int sắp xếp(int *arr, int cnt, int **thấp, int **cao)
{
for(int i = 0; i < cnt; i++)
{
if(arr[i] > 0)
{
*cao[0] = mảng[i];
**cao++;
}
khác
{
*thấp[0] = mảng[i];
**thấp++;
}
}
}

Sẽ rất hữu ích nếu ai đó có thể cho tôi biết tôi đang làm gì sai.

câu trả lời hay nhất

Như đã đề cập trong các ý kiến,int** Việc gián tiếp kép là không cần thiết. Một giao diện chức năng phù hợp hơn được hiển thị bên dưới. Nó lấy đầu vào là một mảng, một số đếm và một con trỏ tới một mảng đầu ra đủ lớn. Là đầu ra, mảng chứa đầy các giá trị dương (âm) và số đếm của từng mảng được ghi*npos (*neg).

Việc xử lý số 0 được giao cho bạn. Chỉ cần chỉnh sửa nếu như tình trạng.

Cũng lưu ý cách tôi sử dụng *npos += 1 thay vì (*npos)++ để tránh lỗi ưu tiên của nhà điều hành.

void riêng biệt(int *arr, int cnt, int *neg, int *pos, int *nneg, int *npos)
{
*nneg = 0;
*npos = 0;

for(int i = 0; i < cnt; i++)
{
nếu (arr[i] > 0)
{
pos[*npos] = arr[i];
*npos += 1;
}
ngược lại nếu (arr[i] < 0)
{
neg[*nneg] = arr[i];
*nneg += 1;
}
}
}

Mặc dù trong ví dụ của bạn, bạn biết có bao nhiêu giá trị dương và âm, nhưng nói chung bạn nên phân bổ một mảng chắc chắn đủ lớn, tức là. cnt 元素。

Về c - tách một mảng int trong hàm C và trả về 2 mảng khác nhau, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/57060340/

27 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress