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