1

コード 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;

問題:

  1. コード 2 は機能するのに、コード 3 ではセグメント エラーが発生するのはなぜですか?

2. に渡すchat *const char *、警告もエラーも発生しませんでしたが、 に代入 char **するconst char **と警告が表示されました。なぜですか?

4

1 に答える 1