C言語プログラミング学習:ポインターと配列の使用の違い

C言語では、ポインタと配列名の両方がアドレスを表しますが、両者には大きな違いがあります。初心者の場合は、2つの違いを理解する必要があります。

まず、簡単な例を挙げましょう。

char * p1 = "hello!"; //文字ポインタp1を定義し、ポインタp1を文字列 "hello!"の最初のアドレスにポイントします。

char s [10] = "hello!"; //配列sを定義して初期化します。

ただし、char s [10]; s = "hello!";の場合、エラーが報告されます。なぜですか?配列名が一定であるため、理由は単純です。

家の近くで、2つの簡単な例を示します。

例1

void main()

{{

char p [] = "abcdef";

p [0] = 'Y';

printf( "%s"、p);

}

このプログラムでYbcdefを出力します

例2

void main()

{{

char * p = "abcdef";

p [0] = 'Y';

printf( "%s"、p);

}

このプログラムは例外をスローします、なぜですか?

例2、char * p = "abcdef"では、ポインターpはスタック領域に格納されますが、文字列は定数で定数領域に格納されますが、ポインタpは定数に格納された文字列の最初のアドレスを指しますエリア。定数エリアの文字列の値を変更します。

例1、char p [] = "abcdef"では、ここでの割り当ては、定数領域の文字列 "abcdef"をスタック領域の配列pのスペースにコピーすることです。配列pは、スタック領域にスペースを開きます。このとき、スタック領域の文字列の値が変更されるため、文字列の値を変更できます。また、このときの配列名pは、スタック領域の「abcdef」の最初のアドレスです。

 


さらに、プログラミング能力を向上させたい場合は、C言語とC ++プログラミングを学んでください。カーブで追い越し、一歩速く!ここでお手伝いできるかもしれません〜

UPは、C / C ++プログラミングの学習に関するビデオチュートリアルをホームページにアップロードしています。興味のある方、または学習している方は、ぜひご覧ください。お役に立てれば幸いです〜

共有(ソースコード、実際のプロジェクトビデオ、プロジェクトノート、基本的な入門チュートリアル)

キャリアを変えてプログラミングを学び、自分で考えるよりも多くの情報を使って学び、成長するパートナーを歓迎します。

プログラミング学習:

プログラミング学習:

おすすめ

転載: blog.csdn.net/weixin_45713725/article/details/115079379