Tôi không tìm thấy lý thuyết về con trỏ đặc biệt phiền hà, nhưng đôi khi tôi bị lúng túng bởi một số ký hiệu. Trong ví dụ sau, ai đó có thể giải thích cách hoạt động của đường dây p = (int*) a
. Lời giải thích tôi có của mã cho thấy rằng dòng này chỉ lưu trữ địa chỉ của phần tử đầu tiên của mảng đầu tiên trong con trỏ p, sao cho printf("%u", *p)
sản lượng 5
. Nếu đây là trường hợp của dòng này thì đây là cách viết gián tiếp hơn p = a[0]
?Ký hiệu con trỏ
int main()
{
int a[][4] = {
5, 7, 5, 9,
4, 6, 3, 1,
2, 9, 0, 6
};
int *p; // create an integer pointer
int (*q)[4]; // create a pointer to a four-element integer array
p = (int*)a; // ?
q = a;
printf("%u %u\n", p, q);
p++;
q++;
printf("%u %u\n", p, q);
return 0;
}
Cảm ơn câu trả lời kỹ lưỡng như vậy. Mặc dù tôi đã biết rằng tôi đã làm việc với một mảng 2-D, tôi đã không đánh giá cao rằng con trỏ và một [0] là một con trỏ tới một [mảng int] hơn là một con trỏ [int] đơn giản. Tôi cũng bỏ lỡ thực tế đã có một số diễn viên đang diễn ra. Đây là một câu trả lời rất hữu ích. –