代做网站作业,游戏软件制作公司,哪个网站可以做分期,w3school网页制作证书#x1f435;本篇文章将会对上篇一维数组笔试题的剩余部分和二维数组的笔试题进行讲解 一、一维数组
1试题部分(一)✏️ char* p abcdef;printf(%zd\n, sizeof(p)); printf(%zd\n, sizeof(p 1)); printf(%zd\n, sizeo… 本篇文章将会对上篇一维数组笔试题的剩余部分和二维数组的笔试题进行讲解 一、一维数组
1试题部分(一)✏️ char* p abcdef;printf(%zd\n, sizeof(p)); printf(%zd\n, sizeof(p 1)); printf(%zd\n, sizeof(*p));printf(%zd\n, sizeof(p[0]));printf(%zd\n, sizeof(p));printf(%zd\n, sizeof(p 1));printf(%zd\n, sizeof(p[0] 1));
2讲解部分 printf(%zd\n, sizeof(p)); 【讲解】p是一个字符指针字符指针在接收字符串时是将字符串的首地址传给指针在这里就是将a的地址传给psizeof(p)就是求a的地址那答案就是4/8个字节 printf(%zd\n, sizeof(p 1)); 【讲解】p是字符a的地址1后跳过一个字节指向下一个元素b此时p1就是b的地址答案为4/8个字节 printf(%zd\n, sizeof(*p)); printf(%zd\n, sizeof(p[0])); 【讲解】p为数组首元素a的地址对其解引用后就是ap[0]也是a字符a的大小为1个字节 printf(%zd\n, sizeof(p)); printf(%zd\n, sizeof(p 1)); 【讲解】当我们定义一个指针系统就会为其开辟内存空间那么这块内存空间的编号就是地址地址的大小为4/8个字节 printf(%zd\n, sizeof(p[0] 1)); 【讲解】p[0]为a的地址1后为b的地址所以大小为4/8个字节 3打印结果
以下是在x64环境下运行的结果 1试题部分(二)✏️ char *p abcdef;printf(%d\n, strlen(p));printf(%d\n, strlen(p 1));printf(%d\n, strlen(*p));printf(%d\n, strlen(p[0]));printf(%d\n, strlen(p)); printf(%d\n, strlen(p 1));printf(%d\n, strlen(p[0] 1));
2讲解部分 printf(%d\n, strlen(p)); 【讲解】strlen函数用来计算字符串长度它会从接收到的地址的位置依次向后读取直到遇到\0结束这里将字符串的首地址a的地址传给了strlen函数因此它会从a的地址处依次向后读取直到遇到\0所以其答案为6个字节 printf(%d\n, strlen(p 1)); 【讲解】这里strlen从b的地址处依次向后读取因此答案为5个字节 printf(%d\n, strlen(*p)); printf(%d\n, strlen(p[0])); 【讲解】strlen函数接收的是地址而这里是将a的ASCII码值传给了strlen但是strlen仍然会将其视为地址那么在运行程序时就会报错 printf(%d\n, strlen(p)); printf(%d\n, strlen(p 1)); 【讲解】在从下图p或者p 1的位置向后读取时不知道什么时候会出现\0随意答案为随机值 printf(%d\n, strlen(p[0] 1)); 【讲解】p[0]为a的地址1后为b的地址从该地址依次向后读取答案为5个字节 3打印结果
以下是在x64环境下运行的结果已将会报错的代码注释 二、二维数组
1试题部分✏️ int a[3][4] { 0 };printf(%zd\n, sizeof(a));printf(%zd\n, sizeof(a[0][0]));printf(%zd\n, sizeof(a[0]));printf(%zd\n, sizeof(a[0] 1));printf(%zd\n, sizeof(*(a[0] 1)));printf(%zd\n, sizeof(a 1));printf(%zd\n, sizeof(*(a 1)));printf(%zd\n, sizeof(a[0] 1));printf(%zd\n, sizeof(*(a[0] 1)));printf(%zd\n, sizeof(*a));printf(%zd\n, sizeof(a[3])); 2讲解部分 printf(%zd\n, sizeof(a)); 【讲解】a是二维数组的数组名数组名单独放在sizeof中就是求整个数组的大小所以答案为12*4 48个字节 printf(%zd\n, sizeof(a[0][0])); 【讲解】求第一行第一个元素的大小答案为4个字节 printf(%zd\n, sizeof(a[0])); 【讲解】在二维数组中a[0]就是二维数组的第一行一维数组的数组名数组名单独放在sizeof中就是求第一行一维数组的大小答案为16个字节
二维数组在计算机中的存储模式如下 printf(%zd\n, sizeof(a[0] 1)); printf(%zd\n, sizeof(*(a[0] 1))); 【讲解】a[0]是第一行一维数组名没有单独出现在sizeof里所以就代表着一维数组首元素的地址1后就是第一行第二个元素的地址解引用后就是第一行第二个元素所以答案分别为4/8和4个字节 printf(%zd\n, sizeof(a 1)); printf(%zd\n, sizeof(*(a 1))); 【讲解】a为二维数组的数组名代表数组首元素的地址也就是第一行的地址1后跳过一行变为第二行的地址对第二行解引用后就是求第二行的大小
另一种分析*(a 1)就是a[1]a[1]就是第二行的数组名将第二行的数组名单独放在sizeof中就是求第二行的大小所以答案分别为4/8和16个字节 printf(%zd\n, sizeof(a[0] 1)); printf(%zd\n, sizeof(*(a[0] 1))); 【讲解】a[0是]第一行一维数组的数组名取地址后就是第一行的地址1后跳过一行也就是第二行的地址对其解引用就是求第二行的大小答案为4/8和16个字节 printf(%zd\n, sizeof(*a)); 【讲解】a[0]是第一行的数组名 *(a 0) *a 数组名单独放在sizeof中就是求第一行的大小答案为16个字节 printf(%zd\n, sizeof(a[3])); 【讲解】首先并不会访问冲突因为sizeof是根据类型判断大小的并不会真正去访问它将他单独放在sizeof中和将a[0]单独放在sizeof中是一个效果答案都是16个字节 3打印结果
以下是在x64环境下运行的结果 那么本次对一维数组和二维数组的笔试题全部讲解完毕后续会对指针的笔试题进行讲解