3

重複の可能性:
配列名は C のポインターですか?

#include <stdlib.h>
int main(int argc, const char *argv[])
{
    char *b=(char*)malloc(sizeof(char)*50);
    b=(char*)"hello world";
    // works

    char a[50];
    a=(char*)"hello world";
    //doesn't work. why? I thought array names are just pointers that point
    //to the first element of the array (which is char). so isn't a char*?
    return 0;
}

機能しない理由は、実際に char* 値を格納する「a」という変数がないためだと思います。「a」は右辺値と見なされるべきですか?コンセプトを正しく理解しているかどうかわからない

4

3 に答える 3

8

配列はポインターではありません [注 1:]配列名が無効な場合 (例: function に渡す場合)、配列の名前がポインターに変わることがあります。
配列は変更不可能な左辺値であり、割り当てることはできず、そこにアドレスを取得できます。

[注 1:]
例:
配列名は、sizeof()

配列のアドレスは変更できませんが、内容は変更できます。

于 2012-06-06T16:19:54.173 に答える
5

配列は変更不可能な左辺値です。何も割り当てることはできませんが、単項演算子を適用することはできます&

char *ここに変数が含まれていないと言うのは正しいです。配列名は、配列オブジェクト (要素数と要素サイズの積に等しいサイズのメモリの連続ブロック) を直接参照します。

于 2012-06-06T16:22:43.223 に答える
4

配列名は単なるポインタだと思っていました

いいえ、そうではないです。それらは配列です。パラメーターとしてポインターを渡すと、ポインターに減衰しますが、それだけです配列を再割り当てすることはできません。個々の値のみを変更できます。

于 2012-06-06T16:19:27.570 に答える