#include <stddef.h>
int main(void) {
char a[3][4] = { { 0 } };
size_t sz;
void * ptr;
char c;
/*
* "Array decay"
*
* 'a' has type 'char[3][4]', as seen on line 4.
* 'a[0]' has type 'char[4]'.
* 'a[0][0]' has type 'char'.
*
* But when an expression with an array type appears
* outside of use as the immediate operand of the
* 'sizeof' operator or the unary '&' address operator,
* then the expressions are converted to yield a pointer
* value that points to the array's element type
*
* 'a' goes from 'char[3][4]' to 'char (*)[4]'
* 'a[0]' goes from 'char[4]' to 'char *'
*/
/* Below, 'a' has type 'char[3][4]' */
sz = sizeof a;
/* Below, 'a[0]' has type 'char[4]' */
sz = sizeof a[0];
/* Below, 'a[0][0]' has type 'char' */
sz = sizeof a[0][0];
/* Below, 'a' yields a value with type 'char(*)[4]' */
ptr = a;
/* Below, 'a[0]' yields a value with type 'char *' */
ptr = a[0];
/* Below, 'a[0][0]' yields a value with type 'char' */
c = a[0][0];
/* Below, '&a' yields a value with type 'char(*)[3][4]' */
ptr = &a;
/* Below, '&a[0]' yields a value with type 'char(*)[4]' */
ptr = &a[0];
/* Below, '&a[0][0]' yields a value with type 'char *' */
ptr = &a[0][0];
/* Below, '*a' has type 'char[4]' */
sz = sizeof *a;
/* Below, '*a[0]' has type 'char' */
sz = sizeof *a[0];
/* Below, '*a' yields a value with type 'char *' */
ptr = *a;
/* Below, '*a[0]' yields a value with type 'char' */
c = *a[0];
return 0;
}
I2luY2x1ZGUgPHN0ZGRlZi5oPgoKaW50IG1haW4odm9pZCkgewogICAgY2hhciBhWzNdWzRdID0geyB7IDAgfSB9OwogICAgc2l6ZV90IHN6OwogICAgdm9pZCAqIHB0cjsKICAgIGNoYXIgYzsKCiAgICAvKgogICAgICogIkFycmF5IGRlY2F5IgogICAgICoKICAgICAqICdhJyBoYXMgdHlwZSAnY2hhclszXVs0XScsIGFzIHNlZW4gb24gbGluZSA0LgogICAgICogJ2FbMF0nIGhhcyB0eXBlICdjaGFyWzRdJy4KICAgICAqICdhWzBdWzBdJyBoYXMgdHlwZSAnY2hhcicuCiAgICAgKgogICAgICogQnV0IHdoZW4gYW4gZXhwcmVzc2lvbiB3aXRoIGFuIGFycmF5IHR5cGUgYXBwZWFycwogICAgICogb3V0c2lkZSBvZiB1c2UgYXMgdGhlIGltbWVkaWF0ZSBvcGVyYW5kIG9mIHRoZQogICAgICogJ3NpemVvZicgb3BlcmF0b3Igb3IgdGhlIHVuYXJ5ICcmJyBhZGRyZXNzIG9wZXJhdG9yLAogICAgICogdGhlbiB0aGUgZXhwcmVzc2lvbnMgYXJlIGNvbnZlcnRlZCB0byB5aWVsZCBhIHBvaW50ZXIKICAgICAqIHZhbHVlIHRoYXQgcG9pbnRzIHRvIHRoZSBhcnJheSdzIGVsZW1lbnQgdHlwZQogICAgICoKICAgICAqICdhJyBnb2VzIGZyb20gJ2NoYXJbM11bNF0nIHRvICdjaGFyICgqKVs0XScKICAgICAqICdhWzBdJyBnb2VzIGZyb20gJ2NoYXJbNF0nIHRvICdjaGFyIConCiAgICAgKi8KCiAgICAvKiBCZWxvdywgJ2EnIGhhcyB0eXBlICdjaGFyWzNdWzRdJyAqLwogICAgc3ogPSBzaXplb2YgYTsKCiAgICAvKiBCZWxvdywgJ2FbMF0nIGhhcyB0eXBlICdjaGFyWzRdJyAqLwogICAgc3ogPSBzaXplb2YgYVswXTsKCiAgICAvKiBCZWxvdywgJ2FbMF1bMF0nIGhhcyB0eXBlICdjaGFyJyAqLwogICAgc3ogPSBzaXplb2YgYVswXVswXTsKCiAgICAvKiBCZWxvdywgJ2EnIHlpZWxkcyBhIHZhbHVlIHdpdGggdHlwZSAnY2hhcigqKVs0XScgKi8KICAgIHB0ciA9IGE7CgogICAgLyogQmVsb3csICdhWzBdJyB5aWVsZHMgYSB2YWx1ZSB3aXRoIHR5cGUgJ2NoYXIgKicgKi8KICAgIHB0ciA9IGFbMF07CgogICAgLyogQmVsb3csICdhWzBdWzBdJyB5aWVsZHMgYSB2YWx1ZSB3aXRoIHR5cGUgJ2NoYXInICovCiAgICBjID0gYVswXVswXTsKCiAgICAvKiBCZWxvdywgJyZhJyB5aWVsZHMgYSB2YWx1ZSB3aXRoIHR5cGUgJ2NoYXIoKilbM11bNF0nICovCiAgICBwdHIgPSAmYTsKCiAgICAvKiBCZWxvdywgJyZhWzBdJyB5aWVsZHMgYSB2YWx1ZSB3aXRoIHR5cGUgJ2NoYXIoKilbNF0nICovCiAgICBwdHIgPSAmYVswXTsKCiAgICAvKiBCZWxvdywgJyZhWzBdWzBdJyB5aWVsZHMgYSB2YWx1ZSB3aXRoIHR5cGUgJ2NoYXIgKicgKi8KICAgIHB0ciA9ICZhWzBdWzBdOwoKICAgIC8qIEJlbG93LCAnKmEnIGhhcyB0eXBlICdjaGFyWzRdJyAqLwogICAgc3ogPSBzaXplb2YgKmE7CgogICAgLyogQmVsb3csICcqYVswXScgaGFzIHR5cGUgJ2NoYXInICovCiAgICBzeiA9IHNpemVvZiAqYVswXTsKCiAgICAvKiBCZWxvdywgJyphJyB5aWVsZHMgYSB2YWx1ZSB3aXRoIHR5cGUgJ2NoYXIgKicgKi8KICAgIHB0ciA9ICphOwoKICAgIC8qIEJlbG93LCAnKmFbMF0nIHlpZWxkcyBhIHZhbHVlIHdpdGggdHlwZSAnY2hhcicgKi8KICAgIGMgPSAqYVswXTsKCiAgICByZXR1cm4gMDsKICB9