检查我对指针/结构和数组的理解

时间:2013-03-26 18:10:21

标签: c arrays pointers typedef

嘿所有我只是想了解一些关键概念,并且做了我自己的研究,但有一些问题,如果有人可以检查一下是否正确,我会非常感激。我正在做一个测试的评论,我们的教授告诉我们自己弄清楚...所以我做了,在这里它是:)

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:创建一个包含代表以下内容的结构

- 每个保存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;

- 创建名为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;

2 个答案:

答案 0 :(得分:2)

Q1:如果问题是指向数组的任何元素,那么你是正确的。但是1不是数组的第一个元素。

Q2:函数应该接受数组的地址,你在函数内声明数组。此外,应避免for之后的分号。此外,您应该只使用&lt;而不是&lt; =。正确的应该是:

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)

答案 1 :(得分:1)

1看起来不错,但您不需要&运算符:

int *thePointer = Pointed;

将起作用,因为数组会衰减为指针。

2 write 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个struct controlMotor的数组(编号为0到5)。对于3的最后一部分:initialize each field of the first element of array with maximum value,您需要初始化第一个元素的字段。这是通过以下方式完成的:

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

当您在[]中增加该值时,您将离开第一个元素。您可以通过位数计算出每个“max”的大小。例如,CRC1是4位,这意味着你可以拥有的最多是1111 2 ,这是15 10