int** p = (int*)malloc(sizeof(int));
p = NULL;
printf("%10d", p);
printf("%10d", &p);
然åŽæˆ‘明白了
0和一些地å€ç¼–å·
但由于这是一个åŒæŒ‡é’ˆï¼Œæˆ‘ä¸åº”该将p值作为地å€å—? æˆ‘æ€Žæ ·æ‰èƒ½åŒæ—¶æ‹¥æœ‰ä¸¤ä¸ªå€¼ï¼Ÿ
更具体, å› ä¸ºpæ˜¯ç¬¬ä¸€ä¸ªæŒ‡é’ˆçš„åœ°å€ å¦‚æžœæˆ‘æœ‰p = 32425那么这æ„味ç€æˆ‘的地å€æŒ‡å‘32425 但是&è¿ç®—符返回地å€çš„值 å› æ¤p应该是& p 但它ä¸æ˜¯
是我的问题。也许我很困惑
ç”案 0 :(得分:3)
首先,请注æ„mallocä¸æ‰§è¡Œä»»ä½•æ“作(除了泄æ¼å†…å˜ï¼‰ï¼Œå› 为您使用NULL
è¦†ç›–å®ƒã€‚ä½ ä¹Ÿåˆ†é…了错误的大å°ï¼Œä½ 需è¦åšp = (int **)malloc(sizeof(int *));
。æ¤å¤–,将%10d
用于指针也ä¸å®Œå…¨æ£ç¡® - 请改用%p
。
è¯è™½å¦‚æ¤ï¼š
第一个printf
将显示一个空指针(å¯èƒ½è¡¨ç¤ºä¸º0ï¼‰ï¼Œå› ä¸ºæ‚¨åˆšåˆšå°†NULL
分é…ç»™p
ï¼Œå› æ¤NULL
çš„å€¼æ˜¯ä»€ä¹ˆä½ çœ‹ã€‚
第二个printf
将显示p
本身的地å€ã€‚æ¢å¥è¯è¯´ï¼Œint ***
(一个三é‡æŒ‡é’ˆï¼‰æŒ‡å‘p
。这ä¸æ˜¯NULL
,当然,p
必须在æŸå¤„ï¼Œå› ä¸ºå®ƒæ˜¯å †æ ˆåˆ†é…çš„å˜é‡ã€‚