A **
chỉ là con trỏ đến con trỏ. Vì vậy, nơi một số instruction*
chứa địa chỉ của cấu trúc instruction
, một số instruction**
chứa địa chỉ của instruction*
có chứa địa chỉ của đối tượng instruction
.
Để truy cập instruction
được trỏ tới bởi một con trỏ được trỏ đến bởi một instruction**
, bạn chỉ cần sử dụng hai dấu sao thay vì một dấu sao, như (**p).repetitions
hoặc một cái gì đó tương tự.
Bạn có thể hình dung nó như thế này:
instruction* ----> instruction
instruction** ----> instruction* ----> instruction
Nên nhớ, tuy nhiên, mà chỉ đơn giản tuyên bố struct instruction** instructions;
không thực sự tạo ra một struct instruction
. Nó chỉ tạo ra một con trỏ chứa một giá trị rác. Bạn sẽ phải khởi tạo nó:
struct instruction inst;
// set members of inst...
*instructions = &inst;
...
(*instructions)->repetitions++; // or whatever
Tuy nhiên, có vẻ như bạn đang sử dụng một instruction**
để trỏ đến một mảng của instruction*
s. Để khởi tạo mảng, bạn cần một vòng lặp for
:
instructions = malloc(sizeof(struct instruction*) * num_of_arrays);
for (i = 0; i < num_of_arrays; ++i)
instructions[i] = malloc(sizeof(struct instruction) * size_of_each_subarray);
Và sau đó bạn có thể truy cập vào một yếu tố như instructions[i]->datamember
.
Nguồn
2011-04-28 06:46:06
Có thể không nên đặt câu hỏi trong nhận xét dòng mã. – takrl
Vui lòng không gắn thẻ C câu hỏi với C# nếu bạn không biết C# là gì. – BoltClock
Vui lòng đặt câu hỏi của bạn bên ngoài khối mã nếu không mọi người sẽ không nhìn thấy nó. Tôi đã chỉnh sửa nó và di chuyển nó ra ngay bây giờ. –