我具有以下结构,其中**座位变成了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;
};
答案 0 :(得分:0)
C指针没有任何内置的方法来跟踪其指向的大小。程序员(即您)必须实现某种存储方式。一种实现方法是将rows
和seats_per_row
变量添加到theatre_seating
结构中,然后在使用时对其进行检查。
答案 1 :(得分:0)
您遇到的是array decay,它表示在传递数组或将其用作指针时大小和维数减少了。
来自C委员会N1570草案:
6.3.2.1左值,数组和函数指示符
...
除非它是sizeof运算符,_Alignof运算符或一元&运算符的操作数,或者是用于初始化数组的字符串文字,否则类型为“ array of type”的表达式将转换为类型为“指向类型的指针”的表达式指向数组对象的初始元素,而不是左值。
因此在这种情况下,如果要检测越界访问,则必须将尺寸和每个尺寸的尺寸存储在某个地方。