配列の注意点

1469 ワード

メモリに配列されたストレージ
  • 変数のメモリアドレッシングは大きいから小さいので、データの格納時には高バイトから
  • が格納.
  • 配列に格納変数とは逆に、要素格納はメモリアドレスが小さいことから始まるが、要素内部格納は変数格納と一致する
  • である.
  • 配列名は配列のアドレス
  • である.
    値転送とアドレス転送
  • 基本データ型の関数としてのパラメータは、値伝達
  • である.
    //  , 
    void change(int value)
    {
    }
    
  • 配列名は関数のパラメータ伝達として伝達する配列のアドレス
  • である.
  • 配列名は配列のアドレス&number==&number[0]==number
  • であるため
  • 配列が関数のパラメータである場合、要素の個数は
  • を省略することができる.
    //  , , 
    void change(int values[])
    {
    }
    

    関数の計算長さ
  • 配列がパラメータである場合、関数では配列の名前から配列要素の個数
  • を算出することはできない.
  • システムは配列パラメータをポインタに自動的に変換するため、ポインタは8バイトを占有します.
  • は配列名を伝達し、実際にはアドレス
  • を伝達する.
  • アドレスが伝達する場合、実はポインタ
  • が伝達される.
  • ポインタは64ビットコンパイル環境で8バイトの
  • を占める.
  • 長さは外でしか伝わらない
  • .
    配列内の最大値の取り出し
  • 変数を定義し、最大値と仮定します.
  • 注意:配列でない値が最大
  • であるとは仮定できません.
  • 配列
  • を巡る
  • 配列の各要素の値を順次取り出し、仮定の最大値と比較し、配列の要素が仮定の最大値より大きい場合、最大値
  • を交換する.
    int arrayMax(int nums[], int length)
    {
        int max = nums[0];
        for(int i = 1; i < length; i++)
        {
            if(max < nums[i])
            {
                max = nums[i];
            }
        }
        return max;
    }
    
  • 配列はポインタ伝達であるため、インデックスにより最大値
  • を取り出すこともできる.
  • この方法は多くのことを考えることができ、インデックスを使用して
  • を行うことができるシナリオもたくさんあります.
    int arrayMax(int nums[], int length)
    {
        int max = 0;
        for(int i = 1; i < length; i++)
        {
            if(nums[max] < nums[i])
            {
                max = i;
            }
        }
        return nums[max];
    }