int i1;
int i2;
int *ptr1;
int *ptr2;
i1 = 1;
i2 = 2;
ptr1 = &i1;
ptr2 = ptr1;
*ptr1 = 3;
i2 = *ptr2;
有人å¯ä»¥å¸®æˆ‘解释这段代ç å—?特别是第八行,我认为它在pointer2ä¸æŒ‡å®šäº†pointer1的地å€ï¼Œæ˜¯å¦ä¼šä½¿æŒ‡é’ˆ2指å‘值1?
请有人帮助我。谢谢。
ç”案 0 :(得分:1)
ptr2 = ptr1
å°†ptr1
(i1
的地å€ï¼‰çš„值分é…ç»™ptr2
。这使ptr2
指å‘ptr1
指å‘çš„åŒä¸€äº‹ç‰©ï¼Œå³å˜é‡i1
。 ptr2
指å‘çš„ä½ç½®ä¸çš„值确实为1
,但说ptr2
指å‘值1
似乎很奇怪。 ptr2
的值是一个内å˜ä½ç½®ï¼Œè¯¥ä½ç½®å½“å‰åŒ…å«ä¸€ç»„ä½ï¼ˆå½“被解释为int时)表示值1
。
ç”案 1 :(得分:1)
是的,多个指针å¯ä»¥æŒ‡å‘åŒä¸€ä¸ªä½ç½®ï¼Œè¿™ç§æƒ…况称为aliasing。虽然您æåŠçš„行确实使ptr2
指å‘值1,但更é‡è¦çš„是它指å‘i1
çš„å˜å‚¨ï¼Œptr1
也是如æ¤ã€‚å› æ¤ï¼Œæ‚¨å¯ä»¥é€šè¿‡ä»¥ä¸‹æ–¹å¼ä½¿ç”¨ä¸‰ä¸ªä¸åŒçš„å称æ¥è®¿é—®i1
:*ptr1
,*ptr2
å’Œi1
æœ¬èº«ã€‚å› æ¤ï¼Œæœ€åŽä¸¤è¡Œç¡®å®žå…·æœ‰é¡ºåºä¾èµ–性,并且程åºåœ¨i1
å’Œi2
ä¸éƒ½ä»¥3结尾。
ç”案 2 :(得分:1)
int i1; //initialize 2 integers
int i2;
int *ptr1; //initialize 2 pointer to integers
int *ptr2;
i1 = 1; //storing values into the integer variables
i2 = 2;
ptr1 = &i1; //pointer ptr1 pointing to the address of the integer variable i1
ptr2 = ptr1; //pointer ptr2 pointing to the address pointed by ptr1 (perfectly ok)
*ptr1 = 3; //value at the address pointed by ptr1 changed to 3 (which changes the value at the address pointed by ptr2 also
i2 = *ptr2; //value at the address pointed by the ptr2 stored in integer variable i2
ç”案 3 :(得分:0)
您æ£åœ¨åšçš„是在ptr1
的地å€ä¸å†™ä¸‹ptr2
的值。è¦æƒ³è±¡ï¼šæ‚¨åœ¨ptr1
ä¸æœ‰ä¸€ä¸ªç®å¤´ï¼Œä¸Šé¢å†™ç€â€œå¦‚果您需è¦å€¼1,您å¯ä»¥æ£ç¡®é‚£é‡Œâ€ã€‚å¤åˆ¶å®ŒæˆåŽï¼Œptr2
现在还有一个ç®å¤´ï¼Œä¸Šé¢å†™ç€â€œå¦‚æžœä½ éœ€è¦value1ï¼Œä½ å¯ä»¥æ£ç¡®é‚£é‡Œâ€ã€‚å› æ¤ï¼Œå‡è®¾ptr2
指å‘值1
。
ç”案 4 :(得分:0)
了解Cä¸çš„指针是一ç§æ–¹å¼ã€‚
指针基本上是一个å˜é‡ï¼Œå…¶å€¼ï¼ˆR值)是å¦ä¸€ä¸ªå˜é‡çš„地å€ï¼ˆL值)。
å˜é‡å…·æœ‰L值(å˜å‚¨å®ƒçš„å˜å‚¨å™¨åœ°å€ï¼‰å’ŒR值(数æ®å€¼ï¼‰ã€‚
所以
ptr2 = ptr1;
表示您将ptr2çš„R值分é…ç»™ptr1çš„R值 Ptr1çš„R值包å«i1çš„L值,所以:
cout << ptr2; /* print i1's L-value (a memory address) */
cout << *ptr2; /* print 1, that is i1's R-value */