コード 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 **
と警告が表示されました。なぜですか?