ホームページ >バックエンド開発 >C#.Net チュートリアル >文字列の代入とはどういう意味ですか?

文字列の代入とはどういう意味ですか?

藏色散人
藏色散人オリジナル
2019-06-04 10:19:179990ブラウズ

文字列は主にプログラミングに使用されます。文字列はストレージ内の文字配列に似ているため、各ビットの単一要素を抽出できます。たとえば、s="abcdefghij"、s[1]="a"、s [9]="j" で、文字列のゼロ位置は s[0]=10 のようにその長さになります (※Ansistring には上記の機能はありません)。これにより、次のような非常に便利になります。高精度な演算として 各ビットを数値に変換し、配列に格納できます。

文字列の代入とはどういう意味ですか?

#ただし、文字列の割り当てには特定の要件があり、たとえば、C 言語の演算子は文字列をまったく操作できません。 C 言語では文字列は配列として扱われるため、文字列には配列と同様の制限があり、特に C 言語の演算子を使用してコピーしたり比較したりすることはできません。

文字列の割り当て方法

C 言語では、文字列表現の形式が 2 つあります。1 つは、char str[20] などの文字配列の形式です。 ="I love china"; もう 1 つは、char *str="I love china" などの文字ポインタの形式です。文字列を文字ポインター変数に割り当てたり、文字配列に文字列を格納したりできます。 C 言語は文字列に対する構文上の糖サポートを直接提供していないためです。さらに、C 標準ライブラリの多くのメソッドは、NULL 文字終了に基づいて文字列を処理するため、これを覚えておく必要があります。

char *p,a='5';
p=&a;                     //显然是正确的,
p="abcd";              //但为什么也可以这样赋值??

上記のプログラムでは、二重引用符は 3 つのことを行います: (定数領域に) スペースを適用して文字列を保存する; 文字列の最後に '/0' を追加する; アドレスを返す。ここで、返されたアドレスが p に代入されます。

しかし、char *p = “hello”; 式は機能するのに、p を配列に変更して値を割り当てると機能しないのはなぜでしょうか。これは、文字列定数「hello」が式に出現する場合、「hello」式で使用される値は、文字自体ではなく、これらの文字が格納されている (定数領域内の) アドレスであるためです。

つまり、文字を指すポインタ p に文字列を割り当てることはできますが、文字配列に文字列を割り当てることはできません。

char a[10] = “hello”; これも可能ですが、この状況は C 言語の初期化でサポートされています。 char a[10] と書かれている場合、a = "hello" これは間違いです。これは a の配列でもあり、char a[10] = "hello"; これは配列の初期化であり、a[0] = 'h' a[1] = 'e'…と同じです。

しかし、char a [10] に変更すると、 a = "hello" は機能しません。 "hello" に割り当てられる値はアドレスであり、 a にもアドレスがありますが、これはポインタとは異なります. ポインタ の値はアドレスであり、配列の値もアドレスですが定数なので定数に値を代入することはできません。 [3]

テストしてみましょう:

#include <stdio.h> int main(){       char *p = "hello";        printf("%s",p);       
        char a[10];        a = "hello";      
        return 0;}error C2440: &#39;=&#39; : cannot convert from &#39;char [6]&#39; to &#39;char [10]&#39;        There is no context in which this conversion is possible

このようなエラー メッセージが表示された場合は、char a[10] を char a[6]

error C2106: ‘=’ : left operand must be l-value

に変更してみてください。演算子の側は「左辺値」である必要があります。いわゆる「左辺値」とは、プログラム内のメモリ空間を占有し、さまざまな変数など変更可能な量を指します。

ポインタを使用する場合、ポインタはインクリメントできますが、配列名はインクリメントできません。コンパイラは配列にスペースを割り当て、配列のアドレス a は定数を表します。定数のインクリメント自体を次のようにします。絶対に無理です。

同時に、ポインタがインクリメントされると、コンパイラが自動的に型を識別します。たとえば、ポインタが int 型を指している場合、次のアドレスを取得したい場合は、ポインタを p するだけです。 p4は気にしないでください。

void ポインターを使用する場合、void コンパイラーは型の長さ (つまり、ポインターが指すオブジェクトのボリューム) を認識できないため、ポインター演算は使用できないことに注意してください。これは不正です。つまり、数学演算は実行できず、* 値演算も使用できません。使用したい場合は、他の型に変換する必要があります。

以上が文字列の代入とはどういう意味ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。