/* * Arrays of strings; contiguous vs. row-pointer layout. * * Jed Yang */ #include void print_contiguous(char (*days1)[10]) { for (int i = 0; i < 7; i++) printf("days1[%d] = %s\n", i, days1[i]); printf("sizeof(days1) = %li\n", sizeof(days1)); printf("sizeof(days1[2]) = %li\n", sizeof(days1[2])); printf("sizeof(days1[2][3]) = %li\n", sizeof(days1[2][3])); printf("\n"); } void print_row_pointer(char **days2) { for (int i = 0; i < 7; i++) printf("days2[%d] = %s\n", i, days2[i]); printf("sizeof(days2) = %li\n", sizeof(days2)); printf("sizeof(days2[2]) = %li\n", sizeof(days2[2])); printf("sizeof(days2[2][3]) = %li\n", sizeof(days2[2][3])); printf("\n"); } int main(void) { // contiguous layout // "7" can be omitted and the compiler would fill it in for us. // try changing "10" to "9" char days1[][10] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" }; for (int i = 0; i < 7; i++) printf("days1[%d] = %s\n", i, days1[i]); printf("sizeof(days1) = %li\n", sizeof(days1)); printf("sizeof(days1[2]) = %li\n", sizeof(days1[2])); printf("sizeof(days1[2][3]) = %li\n", sizeof(days1[2][3])); printf("\n"); print_contiguous(days1); // row-pointer layout // "7" can be omitted and the compiler would fill it in for us. char *days2[] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" }; for (int i = 0; i < 7; i++) printf("days2[%d] = %s\n", i, days2[i]); printf("sizeof(days2) = %li\n", sizeof(days2)); printf("sizeof(days2[2]) = %li\n", sizeof(days2[2])); printf("sizeof(days2[2][3]) = %li\n", sizeof(days2[2][3])); printf("\n"); print_row_pointer(days2); return 0; }