C中的åŒæŒ‡é’ˆå¹¶é‡æ–°åˆ†é…空指针

时间:2015-04-03 17:18:06

标签: c pointers

int** p = (int*)malloc(sizeof(int));
p = NULL;
printf("%10d", p);
printf("%10d", &p);
然åŽæˆ‘明白了 0和一些地å€ç¼–å·

但由于这是一个åŒæŒ‡é’ˆï¼Œæˆ‘ä¸åº”该将p值作为地å€å—? 我怎样æ‰èƒ½åŒæ—¶æ‹¥æœ‰ä¸¤ä¸ªå€¼ï¼Ÿ

更具体, 因为pæ˜¯ç¬¬ä¸€ä¸ªæŒ‡é’ˆçš„åœ°å€ å¦‚æžœæˆ‘æœ‰p = 32425那么这æ„味ç€æˆ‘的地å€æŒ‡å‘32425 但是&è¿ç®—符返回地å€çš„值 å› æ­¤p应该是& p 但它ä¸æ˜¯

是我的问题。也许我很困惑

1 个答案:

答案 0 :(得分:3)

首先,请注æ„mallocä¸æ‰§è¡Œä»»ä½•æ“作(除了泄æ¼å†…存),因为您使用NULL覆盖它。你也分é…了错误的大å°ï¼Œä½ éœ€è¦åšp = (int **)malloc(sizeof(int *));。此外,将%10d用于指针也ä¸å®Œå…¨æ­£ç¡® - 请改用%p。

è¯è™½å¦‚此:

第一个printf将显示一个空指针(å¯èƒ½è¡¨ç¤ºä¸º0),因为您刚刚将NULL分é…ç»™p,因此NULL的值是什么你看。

第二个printf将显示p本身的地å€ã€‚æ¢å¥è¯è¯´ï¼Œint ***(一个三é‡æŒ‡é’ˆï¼‰æŒ‡å‘p。这ä¸æ˜¯NULL,当然,p必须在æŸå¤„,因为它是堆栈分é…çš„å˜é‡ã€‚

相关问题