-1

嘿,我只是想了解一些关键概念,并且已经完成了自己的研究,但是有一些问题,如果有人可以检查它们是否正确,我将不胜感激。我正在为考试做复习,我们的教授告诉我们自己弄清楚……所以我做了,就这样:)

1:声明一个名为 thePointer 的指针,用于保存具有 10 个元素的数组中的一个元素的地址,称为 Pointed

int Pointed[10] = {};

int *thePointer = &Pointed[1];

需要这方面的帮助...

2:编写一个函数,该函数将接受数组的地址和数组中元素的数量,并使用信息将数组的每个元素初始化为零

void arrayFunction (int *array, int element)

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

3:创建一个包含表示以下内容的位的结构

--2 个字段,每个字段包含 4 位 BCD 数字,它们一起保存当前旋转计数(我称它们为 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;

--创建名为marsDrive的结构数组来保存每6个驱动器的状态

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]这构成了一个 s 数组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即 15 10

于 2013-03-26T18:26:41.933 回答