#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char *pstr[10];
scanf("%s", pstr);
printf("The string input is %s",pstr);
}
在这个指针定义中,并没有分配内存,但是运行正常;
要是不是字符数组,而是
char *pc;
scanf("%c",pc);
printf("The char input is %c",*pc);
则系统会报错,为什么?
char * pstr[10];//代表有一个指针数组,有10个字符(串)指针元素;
scanf("%s",pstr);//代表给pstr[0]赋值,这个值仍然是一个整型地址,
printf("The string input is %s",pstr);//输出的只是pstr[0]指针指向的地址,并不是pstr[0]指针指向地址的内容.
//帖图给你看看(我给pStr[0]赋值1234,将转换成一个地址0x34333231,但它仍然是个错误的指针)
为什么是40个字节,char不是一个字节吗?那psrt[10]不是10个字节?
追答pstr数组里保存的不是char ,而是char*, 40个字节保存10个指针, 这10个指针指向的地址里保存的数据才是char,在32位系统下,指针的长度都是4个字节
而scanf("%s", pstr); 会把pstr当作保存char的数组char[]来看待而不是char*[],
这个操作相当于:
char* p=(char*)pstr; //强制转换为char*
scanf("%s",p);