#include <stdio.h>
#include <stddef.h>
#define LEN 2
void foo( int * a[ ] [ 10 ] , size_t len) {
printf ( "%s\n " , "successfully called foo." ) ;
}
int main( void ) {
// a is an LEN-array of an 10-array of (int *)
int * a[ LEN] [ 10 ] = { { 0 } } ;
// but the identifier `a` will decay to be a pointer of type int*[10]
// p1 is a pointer to an 10-array of (int *)
int * ( * p1) [ 10 ] = 0 ;
foo( a, LEN) ;
foo( & a, LEN) ;
return 0 ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRkZWYuaD4KI2RlZmluZSBMRU4gMgoKdm9pZCBmb28oaW50KiBhW11bMTBdLCBzaXplX3QgbGVuKSB7CglwcmludGYoIiVzXG4iLCAic3VjY2Vzc2Z1bGx5IGNhbGxlZCBmb28uIik7Cn0KCmludCBtYWluKHZvaWQpIHsKCQoJLy8gYSBpcyBhbiBMRU4tYXJyYXkgb2YgYW4gMTAtYXJyYXkgb2YgKGludCAqKQoJaW50ICphW0xFTl1bMTBdID0ge3swfX07CgkvLyBidXQgdGhlIGlkZW50aWZpZXIgYGFgIHdpbGwgZGVjYXkgdG8gYmUgYSBwb2ludGVyIG9mIHR5cGUgaW50KlsxMF0KCQoJLy8gcDEgaXMgYSBwb2ludGVyIHRvIGFuIDEwLWFycmF5IG9mIChpbnQgKikKCWludCAqKCpwMSlbMTBdID0gMDsKCQoJZm9vKGEsIExFTik7Cglmb28oJmEsIExFTik7CgkKCXJldHVybiAwOwp9Cg==
compilation info
prog.cpp: In function ‘int main()’:
prog.cpp:20:13: error: cannot convert ‘int* (*)[2][10]’ to ‘int* (*)[10]’ for argument ‘1’ to ‘void foo(int* (*)[10], size_t)’
foo(&a, LEN);
^
stdout