-1

ねえ、私はいくつかの重要な概念を理解しようとしているだけで、私自身の調査を行いましたが、いくつかの質問があり、誰かがそれらが正しいかどうかを確認できれば本当にありがたいです。私はテストのレビューを行っています、そして私たちの教授は私たちにそれを自分で理解するように言いました...だから私はそうしました、そしてここにそれは行きます:)

1:Pointedと呼ばれる10個の要素を持つ配列から要素のアドレスを保持するためにthePointerと呼ばれるポインターを宣言します

int Pointed[10] = {};

int *thePointer = &Pointed[1];

これで助けが必要です...

2:配列のアドレスと配列内の要素の数を受け入れ、情報を使用して配列の各要素をゼロに初期化する関数を記述します

void arrayFunction (int *array, int element)

    for (x = 0; x < element; x++);
      {
      array[x] = 0;
      }

3:以下を表すビットを保持する構造を作成します

--それぞれ4ビットのBCD桁を保持する2つのフィールド、一緒に現在の回転カウント(CRC1およびCRC2と呼びます)を保持しますモーター方向:2ビット速度:4ビット障害状態:3ビット構造に名前を付けますcontrolMotor

struct controlMotor{

unsigned char CRC1: 4;
unsigned char CRC2: 4;
unsigned int motorDirection: 2;
unsigned int speed: 4;
unsigned int faultCondition: 3;
};

--typedefを使用して、この新しいデータ型にstatusDrive_tという名前を付けます。

typedef controlMotor statusDrive_t;

--各6台のドライブのステータスを保持するmarsDriveという名前の構造体の配列を作成します

statusDrive_t marsDrive[5] ={statusDrive_t.CRC1,statusDrive_t.CRC2,statusDrive_t.motorDirection,statusDrive_t.speed,statusDrive_t.faultCondition}

配列の最初の要素の各フィールドを最大値で初期化します

marsDrive[0].CRC1 = 15;
marsDrive[0].CRC2 = 15;
4

2 に答える 2

2

Q1:質問が配列のいずれかの要素を指すことだった場合、あなたは正しいです。ただし、1は配列の最初の要素ではありません。

Q2:関数は配列のアドレスを受け入れる必要があります。関数内で配列を宣言しています。また、後のセミコロンはfor避ける必要があります。また、<=の代わりに<のみを使用する必要があります。正しいものは次のようになります。

void ArrayFunction(int arr[], int i) {
for (x = 0; x < i; x++){
      arr[x] = 0;
      }
}

Q3は良いと思いますが、typedefは

typedef struct controlMotor statusDrive_t;

また、配列は次のように宣言する必要があります

statusDrive_t marsDrive[6];

そして配列は0から始まります(あなたの場合は5まで)

于 2013-03-26T18:22:30.507 に答える
1

&1は問題ないように見えますが、演算子は必要ありません。

int *thePointer = Pointed;

配列がポインタに減衰するため、機能します。

2write a function that will accept the address of an array and number of elements in an arrayあなたの関数はint、質問が求めていたものにさえ近くないものだけを取ります。この質問で参照させようとしているのは、配列を関数に渡すと、配列内の要素の数に関する情報が失われるということです。

私は彼らがもっと次のようなものを探していたと確信しています:

void arrayFunction (int * arr, int elements) // you could do (int arr[], ... as well 
{
    for(int i = 0; i<elements; i++)
        arr[i] = 0;
}

int main(void) {
    int i[4];
    arrayFunction(i, 4);

3 typedefが間違っている、次のようになります。

typedef struct controlMotor statusDrive_t;

構文は次のとおりです。

typedef <the type> <the new name to call it>;

そしてこの場合、タイプはstruct controlMotor

配列も正しく宣言されていません。int marsDrive[6]これにより、の配列が作成されintます。型を配列の前に置きたいので、この場合は、その派手な新しいtypedefを作成したばかりなので、次のようになります。

statusDrive_t marsDrive[6];

6つの構造体controlMotor(0から5までの番号)の配列を提供します。そして、3の最後の部分でinitialize each field of the first element of array with maximum valueは、最初の要素のフィールドを初期化する必要があります。それはによって行われます:

marsDrive[0].CRC1 = ...
marsDrive[0].CRC2 = ...

でその値をインクリメントすると[]、最初の要素から離れていきます。それぞれの「最大」サイズは、ビット数で把握できます。たとえば、CRC1は4ビットです。つまり、最大で1111 2つまり1510です。

于 2013-03-26T18:26:41.933 に答える