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

Ma trận kích thước thay đổi trong C

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

Có cách nào để tạo mảng tập lệnh kép có kích thước thay đổi trong C (không phải C++, chỉ C) không? Tôi biết rằng để tạo một mảng tập lệnh có kích thước thay đổi, bạn chỉ cần sử dụng một con trỏ, ví dụ:

float *mảng;
mảng = (float *) calloc(sizeof(float), n);

Tạo một mảng float tập lệnh có kích thước n. Tôi có thể làm điều gì đó tương tự cho mảng tập lệnh kép không?

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

Không có mảng tập lệnh kép trong C; chỉ có mảng mảng. Ví dụ. cái này:

int a[3][3];

Nên đọc là "mảng 3 mảng 3 số nguyên", không phải "mảng 3 số nguyên". Điều này có thể được nhìn thấy ngay lập tức từ loại biểu thức - ví dụ:một [0] là một biểu thức hợp lệ có kiểuint[3].

Đối với kiểu mảng, kích thước mảng là một phần của kiểu và do đó phải được biết tại thời điểm biên dịch. Vì vậy, mặc dù bạn có thể sử dụng loại "con trỏ tới mảng" để tạo một chiều động, phần còn lại vẫn phải được sửa:

int (*p)[3] // con trỏ tới mảng 3 int mỗi mảng

Có hai giải pháp truyền thống:

  1. 只需使用 width x chiều cao Mảng động một chiều gồm các phần tử, với chỉ số 1D được tính từ tọa độ 2D như sau: (y * chiều rộng + x) bản thân bạn.

  2. Sử dụng con trỏ tới con trỏ:

    int** a = malloc(sizeof(int*) * chiều cao);
    for (i = 0; i < chiều cao; ++i) a[i] = malloc(sizeof(int) * width);
    a[0][0] = 123;
    ...

    Vấn đề ở đây là mảng của bạn không còn cần phải có hình chữ nhật nữa, bạn thực sự không thể thực thi nó. Về mặt hiệu suất, nó cũng tệ hơn một khối bộ nhớ liền kề.

Trong C99, bạn cũng có thể sử dụng mảng có độ dài thay đổi:

void foo(int chiều rộng, int chiều cao) {
int a[chiều rộng] [chiều cao];
...
}

Về c - ma trận có kích thước thay đổi trong C, 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/1651148/

25 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