c语言中要定义字符串的数组可以定义字符串指针数组,数组中定义了几个字符串指针
字符串数组指针的赋值:
字符串指针数组仅仅只是定义了几个指针,还需要为每个指针分配相应的内存空间
char *p[4];for(int i=0;i<4;i++){ p[i]=(char*)malloc(10*sizeof(char));//为每个指针分配空间 //然后scanf/gets;
p[i]="asdfgh";
//scanf("%s",p[i]); //在后面添加flush(stdin);清空回车符
//gets(p[i]);//gets会直接读取遗留在缓冲区的回车符}
fflush(stdin)刷新标准输入缓冲区,把输入缓冲区里的东西丢弃fflush(stdout)刷新标准输出缓冲区,把输出缓冲区里的东西打印到标准输出设备上。
字符串指针数组打印输出:
for(int i=0;i<4;i++){
printf("%s\n",p[i]);
}
分析字符串与字符
char ac[10]="hello";
char *d;
d=(char*)malloc(sizeof(char)*100);
scanf("%s",d); //假设键盘输入qwer
printf("%s\n",d); //打印输出qwer
*d='j'; //将字符串的第一个字符修改为j
printf("%c\n",*d); //打印字符串的第一个字符,打印输出j
printf("%s\n",d); //打印d地址所存储的字符串,打印输出jwer /
//printf("%s\n",*d); //系统会将d地址所指向的字符认证为字符串的内存地址,并从这个地址指向处读取字符串直到'\0' printf("%p\n",ac); //打印字符数组的地址,%p是以十六进制格式输出
printf("%p\n",&ac); //打印字符数组的地址,%p是以十六进制格式输出 printf("%p\n",d); //d是存储的字符串的首地址,并以十六进制格式打印输出
printf("%x\n",d); //d是存储的字符串的首地址,并以十六进制格式打印输出
printf("%d\n",d); //d是存储的字符串的首地址,并以十进制格式打印输出
printf("%p\n",&d); //&d是存储的字符串指针的首地址的内存地址,并以十六进制格式打印输出
printf("%p\n",*d); //*d此处是字符j,打印输出其十六进制的ASCII码
printf("%d\n",*d); //打印j的十进制ASCII码
printf("%p\n",*(d+1));//*(d+1)此处是字符w,打印输出其十六进制ASCII码
printf("%d\n",*(d+1));//打印输出w的十进制ASCII码