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

c - giá trị được yêu cầu dưới dạng toán hạng '&' đơn nhất

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

Tôi gặp sự cố với dự án của mình, dự án phải sử dụng một luồng để thêm từng hàng rồi thêm tất cả, nhưng tôi gặp lỗi cho biết rằng giá trị lvalue được yêu cầu dưới dạng toán hạng '&' đơn nhất

pthread_create(&tid, NULL, &sum_line(0), NULL);

Tôi đã thử một vài thứ nhưng không thể tìm ra, có ý tưởng nào không? Cảm ơn

#include 
#include
#include
khoảng trống tĩnh * sum_line(int nr_line);

int Tổng;
int A[4][4];

int chính() {
pthread_t thời gian;
Tổng = 0;
printf("\nOrig thread tid(%d) Sum=%d", pthread_self(), Sum);
pthread_create(&tid, NULL, &sum_line(0), NULL);
printf("\nLuồng con đã được tạo tid(%d)", tid);
pthread_join(tid,NULL);
printf("\nOrig thread tid(%d)--> thread con đã kết thúc tid(%d) Sum=%d",pthread_self(), tid, Sum);
printf("\n");

}

khoảng trống tĩnh * sum_line(int nr_line) {
int i;
for(i=0;i<4;i++) {
Tổng=Tổng+A[i];
printf("\nTid thread con(%d), i=%d, Sum=%d",pthread_self(),i,Sum);
ngủ(2);
}
printf("\nTid thread con(%d)--> end", pthread_self());
}

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

Truyền con trỏ tới hàm pthread_create()

chỉ viếttổng_dòng,而不是&sum_line(0).

pthread_create() Hàm mong đợi một con trỏ tới hàm luồng—tức là tên hàm—không phải là kết quả của việc gọi hàm. pthread_create()Hàm lên lịch cho một luồng mới để gọi hàm nhưng yêu cầu một con trỏ hàm.

Ngoài ra, chữ ký của hàm thread phải là:

void *hàm (void *arg);

Hàm cũng phải trả về một giá trị - trước khi thêm dấu ngoặc nhọn đóng return 0;.

Bạn đang truyền một con trỏ rỗng cho hàm; bạn không thể mong đợi nó giống như vậy; int nr_line Hoạt động giống nhau. Bạn cần thực hiện một số thao tác chân cầu kỳ để có được các số của hàm số. Có hai lựa chọn chính:

或者

int nr_line = 247;

pthread_create(&tid, NULL, sum_line, &nr_line);

Chức năng này trông như thế này:

void *sum_line(void *arg)
{
int nr_line = *(int *)arg;

return 0;
}

Khi bạn bắt đầu nhiều luồng, chỉ cần đảm bảo mỗi luồng nhận được một con trỏ tới một đối tượng khác nhau.

或者

uintptr_t nr_line = 247;
pthread_create(&tid, NULL, sum_line, (void *)nr_line);

或者:

int nr_line = 247;
pthread_create(&tid, NULL, sum_line, (void *)(uintptr_t)nr_line);

Sau đó, chức năng trông giống như:

void *sum_line(void *arg)
{
int nr_line = (uintptr_t)arg;

return 0;
}

Chuyển đổi kép tránh cảnh báo của trình biên dịch về việc chuyển đổi các số nguyên có kích thước khác nhau thành con trỏ.

Xin lưu ý rằngpthread_create() Hàm sẽ được gọi như thể nó được gọi hàm void *(void *args) Tương tự, vì vậy hãy chuyển bất kỳ loại con trỏ hàm nào khác tới nó, ngay cả khi bạn sử dụng (void (*)(void *)) Thực hiện chuyển đổi sẽ gian lận và gây ra hành vi không xác định.

Về c - lvalue được yêu cầu làm toán hạng '&' đơn nhất, 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/54352768/

29 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