嵌套二维结构数组的大小

时间:2018-09-06 00:45:24

标签: c arrays struct

我具有以下结构,其中**座位变成了2个顾客阵列。我想在将顾客放在座位上之前先检查一下。 具体来说,如果座位为2x2,并且我想知道如何检测合法插入物并越界;

theatre_seating *t;
t->seating[0][0]=some_patron; // how to know this is ok?

t->seating[3][4]=some_patron; // how to know this is not?

结构。

struct patron {
    char last_name[30];
    char first_name[30];
};
struct theatre_seating {
    struct patron **seating;
};

2 个答案:

答案 0 :(得分:0)

C指针没有任何内置的方法来跟踪其指向的大小。程序员(即您)必须实现某种存储方式。一种实现方法是将rowsseats_per_row变量添加到theatre_seating结构中,然后在使用时对其进行检查。

答案 1 :(得分:0)

您遇到的是array decay,它表示在传递数组或将其用作指针时大小和维数减少了。

来自C委员会N1570草案:

  

6.3.2.1左值,数组和函数指示符
  ...
  除非它是sizeof运算符,_Alignof运算符或一元&运算符的操作数,或者是用于初始化数组的字符串文字,否则类型为“ array of type”的表达式将转换为类型为“指向类型的指针”的表达式指向数组对象的初始元素,而不是左值。

因此在这种情况下,如果要检测越界访问,则必须将尺寸和每个尺寸的尺寸存储在某个地方。