二级指针的困惑

来源:百度知道 编辑:UC知道 时间:2024/06/03 03:00:53
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main()
{
char ** tempbuffer;

tempbuffer = (char **)malloc(sizeof(char *)*1000);//分配一段连续内存.32位系统中是1000*4=4000Byte

memset(tempbuffer, 0, (sizeof(char *)*1000)); //把这段内存清0
memset(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不就是字符串的首地址吗?

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

再说这个

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

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

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

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