4

重複の可能性:
C の char s[] と char *s の違いは何ですか?

プログラムがあります:

#include<stdio.h>

int main()
{
    char str[20] = "Hello";
    char *const p=str;
    *p='M';
    printf("%s\n", str);
    return 0;
}

これは答えとして Mello を出力します..しかし、p は定数ポインタなので、エラーを与えるべきではありませんか?

4

4 に答える 4

15

まさに定数ポインタです。指している場所を変更することはできません。指し示すものを変更できます。

const char *p;  // a pointer to const char
char * const p; // a const pointer to char
const char * const p; //combined...

構文を覚える最も簡単な方法は、まったく覚えないことです。宣言を右から左に読むだけです:-)

于 2012-09-22T13:32:57.060 に答える
2

char *const p;char への定数ポインタです。したがって、 が指す値を変更することpは完全に合法です。

詳細な説明があります: const char vs. char const vs const *char const

于 2012-09-22T13:31:53.147 に答える
0

の値は変更できませんが、 の値は変更できpます。 *p

char const *p=strまたはを書いていたらconst char *p=str、 を変更することはできませんでした*p

于 2012-09-22T13:31:57.017 に答える
0

定数ポインタと定数データへのポインタには違いがあります。次の 4 つを考慮してください。

const char * p=str;  // p[0] is const
char const * p=str;  // same
char *const p=str;   // p is const. *p is not
char const *const p=str; // p is const, p[0] also
于 2012-09-22T13:32:42.180 に答える