。
al
は、char
の配列またはchar
のポインタのいずれかとして宣言する必要があります。 、配列として宣言し、次の操作を行います。
char l='r',
al[] = "abcdefghijklmnopqrstuvwxyz"; // braces not required here,
// array size is computed from
// length of string literal
ポインタとしてそれを宣言するには、あなたは配列としてal
を宣言すると、コンパイラは店に脇に十分なストレージを設定します
char l='r';
const char *al = "abcdefghijklmnopqrstuvwxyz";
を使用文字列"abcdefghijklmnopqrstuvwxyz"
のコピーで、この配列の内容は変更可能です(長さは固定されますが、新しい要素を追加したり、配列から既存の要素を削除することはできません)。
ポインタとしてal
を宣言すると、コンパイラは文字列リテラルの最初の文字のアドレスをポインタにコピーします。文字列リテラルの内容を変更しようとすると、未定義の動作になります。 がコードをクラッシュさせたり、クラッシュさせる可能性があります。原則としてリテラル文字列を指すように何かを宣言した場合、あなたはそれconst
宣言したい:あなたが誤って
al[0] = 'z';
ような何かを書く場合には、この方法で
const char *al = "abcdefghijklmnopqrstuvwxyz";
コンパイラはそれをキャッチし、診断を発行する。
[]
サブスクリプト演算子は、配列式とポインタ式の両方で動作しますので、l != al[j]
テストは両方の場合に同じように動作します。それはsizeof
または単項&
演算子のオペランドであるか、または宣言に配列を初期化するために使用されるリテラル文字列である場合を除き
1、表現型の "T
のN
-elementアレイ"は" T
へのポインタ "の式に変換(" decay ")され、式の値は配列の最初の要素のアドレスになります。"
あなたは「a1 [j]」とは何を意味しますか? –