Hãy nhìn! con trỏ kép thực sự lưu trữ như
này Chúng ta hãy nói
int p,*q,**r;
p=50;
để cho các địa chỉ của p
là 400
(&p
là 400
) nếu chúng ta viết q=p
và in q
chúng tôi sẽ nhận được 400
là câu trả lời từ q
đề cập đến địa chỉ của p
và *p
sẽ hiển thị 50
làm đầu ra từ operator *
là "giá trị tại địa chỉ". Bây giờ, chúng ta hãy nói q
có địa chỉ 500
(&q
đầu ra 500
) do đó khi chúng ta làm như thế này: r=q
các r
chứa giá trị 500
và tiền tố r
với *
đó là *r
đầu ra sẽ 400
vì r
ám chỉ rằng giá trị của q
lưu trữ địa chỉ p
là biến con trỏ.
do đó,
nếu trong một chương trình C chúng tôi chạy đoạn mã sau
int main()
{
int p,*q,**r; //assume the address of p to be 400
//assume the address of q to be 500
p=50;
q=p;
r=q;
printf("Value of p-->%d",p);
printf("\nValue of q-->%d",q);
printf("\nValue at address of q \"in the address displayed above\"-->%d",*p);
printf("\nValue of r \"which will be the address of q\"-->%d",r);
printf("\nValue of r \"which will be the adddress of p-->%d",*r);
printf("\nValue of r \"which will be the value of p\"-->%d",**r);
/*
Please change the format specifiers and replace the specifier from %d to %u in case the address value is not being displayed
*/
return 0;
}
OUTPUT
-------
Giá trị của p -> 50
Giá trị của q -> 400
Giá trị tại địa chỉ q "trong địa chỉ được hiển thị ở trên" -> 50
Giá trị của r "sẽ là địa chỉ q" -> 500
Giá trị của r "sẽ là phần bổ sung của p "-> 400
Giá trị của r "sẽ là giá trị của p" -> 50
Thông qua ví dụ trên, tôi chỉ cố gắng giải thích việc sử dụng con trỏ kép. Có lẽ bạn có thể biết điều này Tuy nhiên tôi đã làm cho điểm sống động
Bây giờ sử dụng ví dụ trên với mảng.
Hãy xem
Mảng đã là con trỏ vì chúng có thể được đóng vai trò tham chiếu là * (a + 1) hoặc [1].
Vì vậy, con trỏ kép có thể có nghĩa là mảng con trỏ hoặc một chuỗi chuỗi theo câu hỏi của bạn. Việc sử dụng ký hiệu con trỏ kép phụ thuộc vào tình huống.
Trong câu hỏi mà bạn đã đăng ở trên _TCHAR ** argv hoặc đơn giản là char ** argv là mảng ký tự cho đầu vào bảng điều khiển luôn được chấp nhận dưới dạng luồng ký tự.
Trong java, chúng ta sử dụng một cái gì đó tương tự như public static void main (String argv [])
Điều này cho thấy rõ ràng rằng phương thức chính chấp nhận đầu vào là mảng mảng char (hoặc Strings là ít bit chung).
Hy vọng bạn đã hiểu sự khác biệt. Nếu không vui lòng bình luận. Tôi sẽ giải thích nó cho bạn.
Cảm ơn bạn
Nguồn
2015-11-03 05:31:18
Tôi đã tìm thấy câu trả lời này đây [1. Câu trả lời đầu tiên] (http://stackoverflow.com/questions/18273370/the- đúng-way-to-initialize-a-năng động-con trỏ-to-a-đa chiều-mảng? answerertab = cũ nhất # tab-top) [2. Câu trả lời thứ hai] (http://stackoverflow.com/questions/16001803/pointer -to-pointer-dynamic-hai chiều-mảng? answerertab = cũ nhất # tab-top) –