代码1:没有警告,没有错误。工作完美。
#include <stdio.h>
void printP(const char *p)
{
printf("const char *p is : %p\n",p);
if( p )
printf("%s\n",p);
}
void printP2P(const char **p)
{
printf("const char **p pointer to : %p\n",*p);
if( p &&(*p) )
printf("%s\n",*p);
}
int main()
{
char a[] = "Hello World";
const char *p = a;
const char **p2p = &p;
printP(p);
printP2P(p2p);
return 0;
}
代码2:可以工作。
警告:从不兼容的指针类型初始化[默认启用]
const char *p = a;
==>
char *p = a;
代码 3:分段错误。
警告:从不兼容的指针类型初始化[默认启用]
const char **p2p = &p;
==>
const char **p2p = &a;
问题:
- 为什么代码 2 可以工作,但代码 3 出现段错误?
2.当传递chat *
到时const char *
,没有警告或错误发生,但是当我分配 char **
到时const char **
,我得到了警告,为什么?