分类：电脑/网络-程序设计-C/C++
问题：有关字符指针的问题？#include&lt;stdio.h&gt 
#include <std.h>#define M 5#define N 13int main(void){  char *s1="abc",*s2="wxyz",*s3="ijklmn";  char str1[M][N]={"C","C++","Visual BASIC","Java","Ada"};  char *str2[M]={s2,str1[2],s1,"ijklm"};  char **str3=&s2;  int i;  printf("\n");  pri#include <std.h>#define M 5#define N 13int main(void){  char *s1="abc",*s2="wxyz",*s3="ijklmn";  char str1[M][N]={"C","C++","Visual BASIC","Java","Ada"};  char *str2[M]={s2,str1[2],s1,"ijklm"};  char **str3=&s2;  int i;  printf("\n");  printf("s1=%s,s2=%s,s3=%s\n",s1,s2,s3);  printf("\n");  for(i=0;i<5;i++)        printf("&str1[%d]=%ld;str1[%d]=%s\n",i,&str1[i],i,str1[i]);  printf("\n");  for(i=0;i<5;i++)    printf("&str2[%d]=%ld;str2[%d]=%s\n",i,&str2[i],i,str2[i]);  printf("\n");  for(i=0;i<2;i++)    printf("str3+%d=%ld;*(str3+%d)=%s\n",i,str3+i,i,*(str3+i));  printf("\n");  return 0;}为什么s1,s2,s3前不用加*号就可以显示，s1,s2,s3应该是地址吧，指针变量显示指针所指的内容时不是需要加星号吗，另外指针变量可以直接用字符串来赋值吗？
回答：s1,s2,s3这三个变量是“字符型指针变量”。对于你提供的。下面一一说明：1、对于char *str2[M]={s2,str1[2],s1,"ijklm"}; 这是定义了一个字符型指针数组str2，str2是一个数组，它用来保存字符型指针，str2有M个元素，s2存放在第0个位置，s2存放在第1个位置。这样作是可以的。因为str2是存放“字符型指针”的数组。2、对于printf("s1=%s,s2=%s,s3=%s\n",s1,s2,s3); 你说的“指针变量显示指针所指的内容时需要加星号”，说明你的理解有误，“指针变量显示指针所指的内容时需要加星号”是说在引用指针所指的内容时需要加星号，而当把指针变量作为参数传递给函数时就不要这样了。这里printf函数定义的参数是char *，即：字符型指针，所以，把s1作为printf的参数也就没问题了。因为s1就是字符型指针啊。回答你的最后问题：“另外指针变量可以直接用字符串来赋值吗？”指针变量可以直接用字符串来赋值。比如：char *s1="abc";这样作，是把一个字符串常量赋予s1。