注意区别p=str[0]和p=str
#include <stdio.h>
int main()
{
char *str[3] ={"stra", "strb", "strc"};
char *p =str[0];
int i = 0;
while(i < 3)
{
printf("%s ",p++);
i++;
}
return 0;
}
//p=str[0]
结果是:stra,tra,ra
//下面这种不正确,p不能指向二
#include <stdio.h>
int main()
{
char *str[3] ={"stra", "strb", "strc"};
char *p =str;
int i = 0;
while(i < 3)
{
printf("%s ",p++);
i++;
}
return 0;
}
结果是:
为什么会是这样呢?理论上不应该是stra strb strc吗为什么会乱码呢?
因为str相当于 char **str。 而p是char* 这时候指针类型不同所以没办法进行赋值
那么如何正确输出stra strb strc,如下
#include <stdio.h>
int main()
{
char *str[3] ={"stra", "strb", "strc"};
char **p =str;//因为str是二维指针 str是char**类型
int i = 0;
while(i < 3)
{
printf("%s\t",*p);
p++;
i++;
}
return 0;
}
#include <stdio.h>
int main()
{
char *str[3] ={"stra", "strb", "strc"};
char **p =str;
int i = 0;
while(i < 3)
{
printf("%s\t",str[i]);
p++;
i++;
}
return 0;
}
*p表示的就是str[i]
那么下面的结果会是什么呢?
#include <stdio.h>
int main()
{
char *str[3] ={"stra", "strb", "strc"};
char **p =str;
int i = 0;
while(i < 3)
{
printf("%s\t",(*p)++);
i++;
}
return 0;
}
为什么会是这样呢。因为本质是p指向的是str char**类型,而*p指向的是str[i] char *类型所以说才是这个结果。