int x = 5;
int y = 6;
int *p = &x;
*p = x + y;
p = &y;
*p = x + y;
printf("%d,%d", x, y);
我能ç†è§£å‰3行。我知é“int *p = &x;
表示指针p
指å‘x
的内å˜åœ°å€ã€‚ä½†æˆ‘æ— æ³•ç†è§£æŽ¥ä¸‹æ¥çš„4行代ç 。æ¤ä»£ç 的输出为:
11,17
ä½†æˆ‘æ— æ³•ç†è§£å¦‚何?有人å¯ä»¥å‘我解释一下。
ç”案 0 :(得分:4)
 Â指针是一个å˜é‡ï¼Œå…¶å€¼æ˜¯å¦ä¸€ä¸ªå˜é‡çš„地å€ï¼Œå³å˜å‚¨å•å…ƒçš„直接地å€ã€‚
å½“æ‚¨è¿™æ ·åˆ†é…时,
int *p=&x;// It will point to the address of x variable.
*p
ä¸æ‰€åšçš„任何更改,都会影å“内å˜ã€‚å› æ¤ï¼Œå½“您使用x
访问它时,它具有值。
*p=x+y; // It's equivalent x=x+y;
然åŽy
ä¹Ÿæ˜¯è¿™æ ·ã€‚
现在x
的值为11
。 p=&y;
*p=x+y;// It's equivalent to y=x+y;
所以现在x的值为11
,y值为5
。结果是17
。
ç”案 1 :(得分:3)
让我们é€è¡Œåˆ†æžä»£ç ,是å—?
在进入ç”案之å‰ï¼Œä¸€ä¸ªå°ä¿¡æ¯*
称为间接或å–消引用è¿ç®—符,用于访问值在内å˜åœ°å€ã€‚
æ‰€ä»¥ï¼Œæ ¹æ®ä½ 的代ç :
*p = x + y;
æ·»åŠ x
å’Œy
并将值å˜å‚¨åœ¨p
指å‘的内å˜ä½ç½®[å³ã€‚地å€x
]ã€‚ã€‚å› æ¤ï¼Œè¿™æ ·ï¼Œx
的实际值就会被修改。现在,x
æŒæœ‰x+y
或5+6
或11
。
p = &y;
与int *p = &x;
*p = x + y;
与第一点相åŒçš„逻辑。请记ä½ï¼Œx
å€¼åœ¨ç¬¬ä¸€æ¬¡è¢«ä¿®æ”¹ï¼Œå› æ¤å°†è€ƒè™‘最新的x
å€¼ã€‚å› æ¤ï¼Œä¿®æ”¹åŽçš„y
将为11 + 6
或17
。
printf("%d,%d", x, y);
现在ä¸è¦å‘Šè¯‰æˆ‘ä½ ä¸æ˜Žç™½è¿™ä¸€è¡Œã€‚ : - )
ç”案 2 :(得分:1)
*p = x + y;
所以现在p将指å‘x的地å€ï¼Œè€Œï¼ˆ* p)将指å‘å˜å‚¨åœ¨xä¸çš„å€¼ã€‚æ‰€ä»¥ä½ åœ¨å†…å˜ä½ç½®æ”¹å˜x的值。
p = &y;
现在您将y的地å€åˆ†é…ç»™p。
*p = x + y;
现在使用其内å˜åœ°å€æ›´æ”¹y的值。
ç”案 3 :(得分:0)
实际上这段代ç
int x = 5;
int y = 6;
int *p = &x;
*p = x + y;
p = &y;
*p = x + y;
printf("%d,%d", x, y);
ä½ å¯ä»¥æ”¹å†™ä»¥ä¸‹æ–¹å¼ï¼Œè€Œä¸ä½¿ç”¨æ›´æ˜Žç¡®çš„指针
int x = 5;
int y = 6;
x = x + y;
y = x + y;
printf("%d,%d", x, y);
å› æ¤ï¼Œé¦–å…ˆx
设置为x + y
的总和,并且ç‰äºŽ11
,然åŽå°†y
设置为更新x
的总和(现在ç‰äºŽ11)和y
并且ç‰äºŽ17
。
唯一ä¸åŒçš„是,第一个代ç 段ä¸æ˜¯ç›´æŽ¥ä½¿ç”¨x
å’Œy
,而是使用指针。
å› æ¤
è¯å¥     x = x + y; 被这两个陈述的组åˆå–代
int *p = &x;
*p = x + y;
和陈述
y = x + y;
替æ¢ä¸ºè¿™ä¸¤ä¸ªé™ˆè¿°çš„组åˆ
p = &y;
*p = x + y;
首先,指针p被赋予地å€x
int *p = &x;
并且对象(å³x)被赋予x + y
的和*p = x + y;
对于å˜é‡y和指针pé‡å¤ç›¸åŒçš„æ“作。
ç”案 4 :(得分:0)
*p = x + y
å–消引用指针p,将x + y
的值赋给p指å‘的内å˜ã€‚相当于x = x + y
。
x现在ç‰äºŽx + y
,å³5 + 6 = 11
。
p = &y
å°†y的地å€åˆ†é…给指针p。指针p指å‘y的记忆,æ¢å¥è¯è¯´ã€‚
*p = x +y
å–消引用指针p,将x + y
的值赋给p指å‘的内å˜ã€‚相当于y = x + y
。 y现在ç‰äºŽx + y,å³11 + 6 = 17
。
最åŽï¼Œx = 11
,y = 17
。
希望它有所帮助。
ç”案 5 :(得分:0)
为了更好地ç†è§£æŒ‡é’ˆå’Œç›¸å…³çš„&符å·å’Œæ˜Ÿå·ç¬¦å·ï¼Œæˆ‘建议这个基本陈述:
我们å‡è®¾ï¼š
int * p;
int x;
1)指针是一个地å€ã€‚è¿™æ„味ç€p是å˜å‚¨å™¨ä¸å˜å‚¨æ•´æ•°å€¼çš„地å€
2)当使用* p时,星å·ç¬¦å·å¯ä»¥ï¼†ï¼ƒ34;翻译"作为"地å€çš„价值&#34 ;;è¿™æ„味ç€å½“我们使用* p时,我们想è¦ä¸€ä¸ªé©»ç•™åœ¨åœ°å€pä¸çš„值;
3)当使用& x时,&符å·å¯ä»¥ï¼†ï¼ƒ34;翻译"作为""的地å€;è¿™æ„味ç€æˆ‘们想è¦èŽ·å–x;
å› æ¤æ“作:
0)p = x;ä¸æ£ç¡®;
1)* p = x;是æ£ç¡®çš„(如果p是有效地å€ï¼‰ï¼Œåœ°å€p的值现在与值x相åŒ;
2)p =& x;是æ£ç¡®çš„,* p == x;在这ç§æƒ…况下,您还需è¦äº†è§£ï¼Œp和& x是相åŒçš„地å€ã€‚å› æ¤ï¼Œå¦‚果您更改* p或x,则å¦ä¸€ä¸ªä¹Ÿå°†å…·æœ‰ç›¸åŒçš„值。