二级指针的困惑

#include <stdio.h>#include <stdlib.h>#include <string.h>main(){char ** tempbuffer;tempbuffer = (char **)malloc(sizeof(char *)*1000);//分配一段连续内存.32位系统中是1000*4=4000Bytememset(tempbuffer, 0, (sizeof(char *)*1000)); //把这段内存清0memset(tempbuffer, ✀a✀, (sizeof(char *)*1000));//把这段内存填✀a✀,应该是4000个a. printf("%s尀n",*tempbuffer); //这是取这段内存的… printf("%s尀n",*tempbuffer); //这是取这段内存的第一个内容做为指针的值,然后输出这段指针值指向的内容(非法访问).而不是输出这段内存的内容. printf("%s尀n",(char*)tempbuffer);//这样才会输出这段内存中的a这两句不太懂,好像一样……麻烦详解下*tempbuffer 和 (char*)tempbuffer的效果为何不同 *tempbuffer不就是字符串的首地址吗?
2026年09月23日 10:15
有3个网友回答
网友(1):

怎么说呢,指针也是有不同的,int* 和char* 虽然都是指针,而且都是16位,但却是不同的指针,int*每次+1都会跳4个字节,而char*每次只会跳1个字节

再说这个

*tempbuffer是指向指针的指针,每次会跳4个字节,所以报错

强制转换为char* 后 (char*)tempbuffer才会每次跳1个字节,不知道你懂了没

网友(2):

你也知道tempbuffer是二级指针啊,*tempbuffer当然不可能是字符串,肯定要用强制转换让程序以为它是一级指针.

网友(3):

tempbuffer是指针
那么*tempbuffer用他指向的内容作参数
(char*)tempbuffer用的就是tempbuffer自己作参数