2025年C语言指针笔试题全面解析及答案_第1页
2025年C语言指针笔试题全面解析及答案_第2页
2025年C语言指针笔试题全面解析及答案_第3页
2025年C语言指针笔试题全面解析及答案_第4页
2025年C语言指针笔试题全面解析及答案_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2025年C语言指针笔试题全面解析及答案一维数组指针相关笔试题题目1```cinclude<stdio.h>intmain(){inta[]={1,2,3,4};printf("%d\n",sizeof(a));printf("%d\n",sizeof(a+0));printf("%d\n",sizeof(a));printf("%d\n",sizeof(a+1));printf("%d\n",sizeof(a[1]));printf("%d\n",sizeof(&a));printf("%d\n",sizeof(&a));printf("%d\n",sizeof(&a+1));printf("%d\n",sizeof(&a[0]));printf("%d\n",sizeof(&a[0]+1));return0;}```解析-`sizeof(a)`:`a`单独放在`sizeof`内部,这里的`a`表示整个数组,所以`sizeof(a)`计算的是整个数组的大小。数组`a`包含4个`int`类型元素,每个`int`通常为4字节,因此`sizeof(a)`的结果是`44=16`字节。-`sizeof(a+0)`:`a`没有单独放在`sizeof`内部,此时`a`表示数组首元素的地址,`a+0`仍然是首元素地址,地址在32位系统下是4字节,在64位系统下是8字节。-`sizeof(a)`:`a`表示首元素地址,`a`就是对首元素地址解引用,得到首元素,首元素是`int`类型,所以`sizeof(a)`为4字节。-`sizeof(a+1)`:`a`是首元素地址,`a+1`是第二个元素的地址,地址的大小在32位系统下是4字节,64位系统下是8字节。-`sizeof(a[1])`:`a[1]`表示数组的第二个元素,是`int`类型,所以`sizeof(a[1])`为4字节。-`sizeof(&a)`:`&a`取出的是整个数组的地址,地址的大小在32位系统下是4字节,64位系统下是8字节。-`sizeof(&a)`:`&a`是整个数组的地址,对其解引用`&a`得到的是整个数组,所以`sizeof(&a)`计算的是整个数组的大小,结果为16字节。-`sizeof(&a+1)`:`&a`是整个数组的地址,`&a+1`跳过整个数组,指向数组后面的地址,它仍然是一个地址,大小在32位系统下是4字节,64位系统下是8字节。-`sizeof(&a[0])`:`&a[0]`是数组首元素的地址,地址大小在32位系统下是4字节,64位系统下是8字节。-`sizeof(&a[0]+1)`:`&a[0]`是首元素地址,`&a[0]+1`是第二个元素的地址,地址大小在32位系统下是4字节,64位系统下是8字节。字符数组指针相关笔试题题目2```cinclude<stdio.h>include<string.h>intmain(){chararr[]={'a','b','c','d','e','f'};printf("%d\n",sizeof(arr));printf("%d\n",sizeof(arr+0));printf("%d\n",sizeof(arr));printf("%d\n",sizeof(arr[1]));printf("%d\n",sizeof(&arr));printf("%d\n",sizeof(&arr+1));printf("%d\n",sizeof(&arr[0]+1));printf("%d\n",strlen(arr));printf("%d\n",strlen(arr+0));printf("%d\n",strlen(arr));printf("%d\n",strlen(arr[1]));printf("%d\n",strlen(&arr));printf("%d\n",strlen(&arr+1));printf("%d\n",strlen(&arr[0]+1));return0;}```解析-`sizeof`相关-`sizeof(arr)`:`arr`单独放在`sizeof`内部,`arr`表示整个数组,数组有6个`char`类型元素,每个`char`是1字节,所以`sizeof(arr)`为6字节。-`sizeof(arr+0)`:`arr`不是单独在`sizeof`内,`arr`是首元素地址,`arr+0`还是首元素地址,地址大小在32位系统下是4字节,64位系统下是8字节。-`sizeof(arr)`:`arr`是首元素地址,`arr`是首元素,为`char`类型,所以`sizeof(arr)`为1字节。-`sizeof(arr[1])`:`arr[1]`是数组第二个元素,是`char`类型,`sizeof(arr[1])`为1字节。-`sizeof(&arr)`:`&arr`是整个数组的地址,地址大小在32位系统下是4字节,64位系统下是8字节。-`sizeof(&arr+1)`:`&arr+1`跳过整个数组指向后面的地址,是地址类型,大小在32位系统下是4字节,64位系统下是8字节。-`sizeof(&arr[0]+1)`:`&arr[0]`是首元素地址,`&arr[0]+1`是第二个元素地址,地址大小在32位系统下是4字节,64位系统下是8字节。-`strlen`相关-`strlen(arr)`:`strlen`函数是计算字符串长度,遇到`'\0'`才停止。而数组`arr`中没有`'\0'`,所以`strlen(arr)`的结果是未定义的,它会一直往后找`'\0'`。-`strlen(arr+0)`:`arr+0`还是首元素地址,和`strlen(arr)`情况一样,结果未定义。-`strlen(arr)`:`arr`是首元素`'a'`,其ASCII码值为97,`strlen`函数期望的参数是指针,这里把97作为地址传递,会导致未定义行为。-`strlen(arr[1])`:`arr[1]`是`'b'`,ASCII码值为98,把98作为地址传递给`strlen`,会导致未定义行为。-`strlen(&arr)`:`&arr`是整个数组的地址,`strlen`会从这个地址开始找`'\0'`,由于数组中没有`'\0'`,结果未定义。-`strlen(&arr+1)`:`&arr+1`跳过整个数组,从这个地址开始找`'\0'`,结果未定义。-`strlen(&arr[0]+1)`:`&arr[0]+1`是第二个元素地址,从这里开始找`'\0'`,由于数组中没有`'\0'`,结果未定义。字符串指针相关笔试题题目3```cinclude<stdio.h>include<string.h>intmain(){charp="abcdef";printf("%d\n",sizeof(p));printf("%d\n",sizeof(p+1));printf("%d\n",sizeof(p));printf("%d\n",sizeof(p[0]));printf("%d\n",sizeof(&p));printf("%d\n",sizeof(&p+1));printf("%d\n",sizeof(&p[0]+1));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));return0;}```解析-`sizeof`相关-`sizeof(p)`:`p`是一个指针,指向字符串`"abcdef"`的首字符,指针大小在32位系统下是4字节,64位系统下是8字节。-`sizeof(p+1)`:`p+1`是指向字符串中第二个字符的指针,指针大小在32位系统下是4字节,64位系统下是8字节。-`sizeof(p)`:`p`是字符串的首字符`'a'`,为`char`类型,所以`sizeof(p)`为1字节。-`sizeof(p[0])`:`p[0]`等价于`(p+0)`,就是首字符`'a'`,为`char`类型,`sizeof(p[0])`为1字节。-`sizeof(&p)`:`&p`是指针`p`的地址,地址大小在32位系统下是4字节,64位系统下是8字节。-`sizeof(&p+1)`:`&p+1`跳过`p`指向的空间,指向后面的地址,是地址类型,大小在32位系统下是4字节,64位系统下是8字节。-`sizeof(&p[0]+1)`:`&p[0]`是首字符地址,`&p[0]+1`是第二个字符地址,地址大小在32位系统下是4字节,64位系统下是8字节。-`strlen`相关-`strlen(p)`:`p`指向字符串`"abcdef"`的首字符,`strlen`会计算到`'\0'`为止,所以`strlen(p)`结果为6。-`strlen(p+1)`:`p+1`指向第二个字符`'b'`,从这里开始计算字符串长度,结果为5。-`strlen(p)`:`p`是首字符`'a'`,其ASCII码值为97,把97作为地址传递给`strlen`,会导致未定义行为。-`strlen(p[0])`:`p[0]`是首字符`'a'`,和`strlen(p)`情况一样,会导致未定义行为。-`strlen(&p)`:`&p`是指针`p`的地址,从这个地址开始找`'\0'`,结果未定义。-`strlen(&p+1)`:`&p+1`跳过`p`指向的空间,从这个地址开始找`'\0'`,结果未定义。-`strlen(&p[0]+1)`:`&p[0]+1`是第二个字符地址,从这里开始计算字符串长度,结果为5。二维数组指针相关笔试题题目4```cinclude<stdio.h>intmain(){inta[3][4]={0};printf("%d\n",sizeof(a));printf("%d\n",sizeof(a[0][0]));printf("%d\n",sizeof(a[0]));printf("%d\n",sizeof(a[0]+1));printf("%d\n",sizeof((a[0]+1)));printf("%d\n",sizeof(a+1));printf("%d\n",sizeof((a+1)));printf("%d\n",sizeof(&a[0]+1));printf("%d\n",sizeof((&a[0]+1)));printf("%d\n",sizeof(a));printf("%d\n",sizeof(a[3]));return0;}```解析-`sizeof(a)`:`a`单独放在`sizeof`内部,`a`表示整个二维数组,数组有`34=12`个`int`类型元素,每个`int`是4字节,所以`sizeof(a)`为`124=48`字节。-`sizeof(a[0][0])`:`a[0][0]`是二维数组的第一个元素,是`int`类型,所以`sizeof(a[0][0])`为4字节。-`sizeof(a[0])`:`a[0]`可以看作是第一行数组,单独放在`sizeof`内部,它表示第一行整个数组,有4个`int`类型元素,所以`sizeof(a[0])`为`44=16`字节。-`sizeof(a[0]+1)`:`a[0]`不是单独在`sizeof`内,此时`a[0]`表示第一行首元素地址,`a[0]+1`是第一行第二个元素地址,地址大小在32位系统下是4字节,64位系统下是8字节。-`sizeof((a[0]+1))`:`a[0]+1`是第一行第二个元素地址,`(a[0]+1)`是第一行第二个元素,为`int`类型,所以`sizeof((a

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论