第六大题:
每小题1分,满分7分
📌 复习:【维生素C语言】第十章 - 指针的进阶(上)( 0x00 字符指针的定义 )
💬 预测下列代码的运行结果( sizeof )
int main() { char* p = "abcdef"; /* 1 */ printf("%d\n", sizeof(p)); /* 2 */ printf("%d\n", sizeof(p + 1)); /* 3 */ printf("%d\n", sizeof(*p)); /* 4 */ printf("%d\n", sizeof(p[0])); /* 5 */ printf("%d\n", sizeof(&p)); /* 6 */ printf("%d\n", sizeof(&p + 1)); /* 7 */ printf("%d\n", sizeof(&p[0] + 1)); return 0; }
💡 答案:
/* 1 */ printf("%d\n", sizeof(p)); // 4/8 /* 2 */ printf("%d\n", sizeof(p+1)); // 4/8 /* 3 */ printf("%d\n", sizeof(*p)); // 1 /* 4 */ printf("%d\n", sizeof(p[0])); // 1 /* 5 */ printf("%d\n", sizeof(&p));// 4/8 /* 6 */ printf("%d\n", sizeof(&p+1)); // 4/8 /* 7 */ printf("%d\n", sizeof(&p[0]+1)); // 4/8
🔑 解析:
1️⃣
2️⃣
3️⃣
4️⃣
5️⃣
6️⃣
7️⃣
第七大题:
每小题1分,满分7分
💬 预测下列代码的运行结果( strlen )
int main() { char *p = "abcdef"; /* 1 */ printf("%d\n", strlen(p)); /* 2 */ printf("%d\n", strlen(p+1)); /* 3 */ printf("%d\n", strlen(*p)); /* 4 */ printf("%d\n", strlen(p[0])); /* 5 */ printf("%d\n", strlen(&p)); /* 6 */ printf("%d\n", strlen(&p+1)); /* 7 */ printf("%d\n", strlen(&p[0]+1)); return 0; }
💡 答案:
/* 1 */ printf("%d\n", strlen(p)); // 6 /* 2 */ printf("%d\n", strlen(p+1)); // 5 /* 3 */ printf("%d\n", strlen(*p)); // error /* 4 */ printf("%d\n", strlen(p[0])); // error /* 5 */ printf("%d\n", strlen(&p)); // 随机值 /* 6 */ printf("%d\n", strlen(&p+1)); // 随机值 /* 7 */ printf("%d\n", strlen(&p[0]+1)); // 5
🔑 解析:
1️⃣
2️⃣
3️⃣
4️⃣
5️⃣
6️⃣
7️⃣
第八大题:
每小题1分,满分11分
💬 预测下列代码的运行结果( sizeof )
int main() { int a[3][4] = {0}; // 二维数组 /* 1 */ printf("%d\n",sizeof(a)); /* 2 */ printf("%d\n",sizeof(a[0][0])); /* 3 */ printf("%d\n",sizeof(a[0])); /* 4 */ printf("%d\n",sizeof(a[0]+1)); /* 5 */ printf("%d\n",sizeof(*(a[0]+1))); /* 6 */ printf("%d\n",sizeof(a+1)); /* 7 */ printf("%d\n",sizeof(*(a+1))); /* 8 */ printf("%d\n",sizeof(&a[0]+1)); /* 9 */ printf("%d\n",sizeof(*(&a[0]+1))); /* 10 */ printf("%d\n",sizeof(*a)); /* 11 */ printf("%d\n",sizeof(a[3])); return 0; }
💡 答案:
/* 1 */ printf("%d\n",sizeof(a)); // 48 /* 2 */ printf("%d\n",sizeof(a[0][0])); // 4 /* 3 */ printf("%d\n",sizeof(a[0])); // 16 /* 4 */ printf("%d\n",sizeof(a[0]+1)); // 4/8 /* 5 */ printf("%d\n",sizeof(*(a[0]+1)));// 4 /* 6 */ printf("%d\n",sizeof(a+1)); // 4 /* 7 */ printf("%d\n",sizeof(*(a+1))); // 16 /* 8 */ printf("%d\n",sizeof(&a[0]+1)); // 4/8 /* 9 */ printf("%d\n",sizeof(*(&a[0]+1))); // 16 /* 10 */ printf("%d\n",sizeof(*a)); // 16 /* 11 */ printf("%d\n",sizeof(a[3])); // 16
🔑 解析:
1️⃣
2️⃣
3️⃣
4️⃣
5️⃣
6️⃣
7️⃣
8️⃣
9️⃣
🔟
1️⃣1️⃣
总结:
📚 数组名的意义:
① sizeof ( 数组名 ) - 数组名表示整个数组,计算的是整个数组的大小。
② &数组名,这里的数组名表示整个数组,取出的是整个数组的地址。
③ 除此之外,所有的数组名都表示首元素的地址。
花絮:
制作不易……大半夜肝出来的!看到画图工具就想吐……