扬州专业手机网站开发,网站优化成功案例,小程序源码使用教程,四川成都旅游指针概念 第 1 题#xff08;单选题#xff09; 题目名称#xff1a; 以下系统中#xff0c;int类型占几个字节#xff0c;指针占几个字节#xff0c;操作系统可以使用的最大内存空间是多大#xff1a;( ) 题目内容#xff1a; A .32位下#xff1a;4,4,2^32 64位下单选题 题目名称 以下系统中int类型占几个字节指针占几个字节操作系统可以使用的最大内存空间是多大( ) 题目内容 A .32位下4,4,2^32 64位下8,8,2^64 B .32位下4,4,不限制 64位下4,8,不限制 C .32位下4,4,2^32 64位下4,8,2^64 D .32位下4,4,2^32 64位下4,4,2^64 答案解析
32位系统下
int占4个字节指针表示地址空间个数总共有2^32个故占4个字节
64位系统下
int占4个字节指针表示地址空间个数总共有2^64个故占8个字节
因此选择C 第 2 题单选题 题目名称 下面代码的结果是 #include stdio.h
int main()
{int arr[] {1,2,3,4,5};short *p (short*)arr;int i 0;for(i0; i4; i){*(pi) 0;}for(i0; i5; i){printf(%d , arr[i]);}return 0;
} 题目内容 A .1 2 3 4 5 B .0 0 3 4 5 C .0 0 0 0 5 D .1 0 0 0 0 答案解析
arr数组在内存中的存储格式为 0x00ECFBF4: 01 00 00 00
0x00ECFBF8: 02 00 00 00
0x00ECFBFC: 03 00 00 00
0x00ECFC00: 04 00 00 00
0x00ECFC04: 05 00 00 00
指针p的类型为short*类型的因此p每次只能所有两个字节for循环对数组中内容进行修改时一次访问的是 arr[0]的低两个字节arr[0]的高两个字节arr[1]的低两个字节arr[1]的高两个字节故改变之后数组中内容如下
0x00ECFBF4: 00 00 00 00
0x00ECFBF8: 00 00 00 00
0x00ECFBFC: 03 00 00 00
0x00ECFC00: 04 00 00 00
0x00ECFC04: 05 00 00 00
故最后打印0 0 3 4 5
因此选择B 第 3 题单选题 题目名称 关于二级指针描述描述正确的是 题目内容 A .二级指针也是指针只不过比一级指针更大 B .二级指针也是指针是用来保存一级指针的地址 C .二级指针是用来存放数组的地址 D .二级指针的大小是4个字节 答案解析
A错误二级指针是指针不能说起比一级指针大只能说二级指针指向的空间中存储的也是一个地址
B正确
C错误数组的地址一般用一级指针存储或者用数组指针接收
D二级指针是指针但是否占4个字节不一定要看具体的系统
因此选择B 第 4 题单选题 题目名称 下面关于指针运算说法正确的是 题目内容 A .整形指针1向后偏移一个字节 B .指针-指针得到是指针和指针之间的字节个数 C .整形指针解引用操作访问4个字节 D .指针不能比较大小 答案解析
注意此题是有问题的说法不严谨如果将整形指针理解成int*类型的指针那么一下说法解析如下
A错误整形指针1向后便宜一个整形类型的大小即4个字节
B错误两个指针相减指针必须指向一段连续空间减完之后的结构代表两个指针之间相差元素的个数
C正确整形指向的是一个整形的空间解引用操作访问4个字节
D指针中存储的是地址地址可以看成一个数据因此是可以比较大小的
因此选择C 第 5 题单选题 题目名称 下面哪个是指针数组 题目内容 A . int* arr[10]; B .int * arr[]; C .int **arr; D .int (*arr)[10]; 答案解析
指针数组是一个数组该数组的每个元素是一个指针
A正确定义了一个数组该数组中有10个元素每个元素都是int*的指针类型
B错误编译失败定义数组时要给出空间的大小如果没有给时必须要给出初始化结果
C错误定义了一个二级指针
D错误*和arr先结合说明arr不是数组。实际上arr是一个指针一个指向数组的指针。
因此选择A 第 6 题单选题 题目名称 下列程序段的输出结果为 unsigned long pulArray[] {6,7,8,9,10};
unsigned long *pulPtr;
pulPtr pulArray;
*(pulPtr 3) 3;
printf(%d,%d\n,*pulPtr, *(pulPtr 3)); 题目内容 A .9,12 B .6,9 C .6,12 D .6,10 答案解析
unsigned long pulArray[] {6,7,8,9,10}; unsigned long *pulPtr; pulPtr pulArray; // 数组名代表数组首元素地址因此pulptr指向的是数组中第一个元素的位置 *(pulPtr 3) 3; // pulptr3访问的是数组中第三个元素(数组下标从0开始)故将9改9312 printf(%d,%d\n,*pulPtr, *(pulPtr 3)); // 打印第一个和第三个元素因此打印6和12
因此选择C 第 7 题单选题 题目名称 关于指针的概念错误的是( ) 题目内容 A .指针变量是用来存放地址的变量 B .指针变量中存的有效地址可以唯一指向内存中的一块区域 C .野指针也可以正常使用 D .局部指针变量不初始化就是野指针 答案解析
A正确指针变量中存储的是一个地址指向同类型的一块内存空间
B正确地址是唯一的一个指针变量中只能存储一个地址因此可以唯一指向内存中的一块区域
C野指针指向的空间时非法的或者说该指针指向的空间已经不存在了因此野指针不能使用
D局部指针变量没有初始化时里面就是随机值因此指向那个位置不一定故将其看成是野指针
因此选择C 第 8 题单选题 题目名称 在小端机器中下面代码输出的结果是 #include stdio.h
int main()
{int a 0x11223344;char *pc (char*)a;*pc 0;printf(%x\n, a);return 0;
} 题目内容 A .00223344 B .0 C .11223300 D .112233 答案解析
假设a变量的地址为0x64则a变量在内存中的模型为
0x64| 44 |
0x65| 33 |
0x66| 22 |
0x67| 11 |
char*类型的指针变量pc指向只能指向字符类型的空间如果是非char类型的空间必须要将该空间的地址强转为char*类型。
char *pc (char*)a; pc实际指向的是整形变量a的空间即pc的内容为0x64即44 *pc0即将44位置中内容改为0修改完成之后a中内容为0x11223300
因此选择C
结构体的声明 第 1 题单选题 题目名称 如有以下代码 struct student
{int num;char name[32];float score;
}stu; 则下面的叙述不正确的是( ) 题目内容 A .struct 是结构体类型的关键字 B .struct student 是用户定义的结构体类型 C .num, score 都是结构体成员名 D .stu 是用户定义的结构体类型名 答案解析
A正确在C语言中需要自定义类型时要用到struct关键字
B正确在C语言中用struct定义的结构体定义结构体类型变量时需要用struct student
C正确结构体中的变量名称称之为结构体的成员
D错误stu是定义的结构体类型变量不是名称如果想要让stu为结构体类型名称时必须在结构体定义时添加 typedef关键字
因此选择D 第 2 题单选题 题目名称 结构体访问成员的操作符不包含 题目内容 A .. 操作符 B .- 操作符 C .* 解引用操作符 D .sizeof 答案解析
A正确结构体类型变量访问结构体中成员时使用.操作符
B正确指向结构体类型变量的指针访问结构体中成员时使用-操作符
C正确指向结构体类型变量的指针也可以通过.方式访问成员只不过要先通过*对该指针解引用
D错误sizeof是求结构体类型大小的
因此选择D 第 3 题单选题 题目名称 关于VS调试快捷键说法错误的是 题目内容 A .F5-是开始执行不调试 B .F10-是逐过程调试遇到函数不进入函数 C .F11-是逐语句调试可以观察调试的每个细节 D .F9是设置断点和取消断点 答案解析
A错误F5是开始调试在遇到短点的位置可以停下来CtrlF5是开始执行不调试
B正确F10遇到函数时不会进入到函数体中F11会
CF11遇到函数时会进入函数中
DF9会在光标所在行下短点如果有短点会取消短点
因此选择A 第 4 题单选题 题目名称 下面程序要求输出结构体中成员a的数据,以下不能填入横线处的内容是( ) #include stdio.h
struct S
{ int a;int b;
};
int main( )
{ struct S a, *pa;a.a 99;printf( %d\n, __________);return 0;
} 题目内容 A .a.a B .*p.a C .p-a D .(*p).a 答案解析
结构体类型变量需要访问其成员时用.运算符如果是指向结构体变量的指针访问时需要用-,或者先对指针解引用取到指向的结构体类型的变量再通过.访问但是要注意优先级
因此选择B 第 5 题单选题 题目名称 关于Debug和Release的区别说法错误的是 题目内容 A .Debug被称为调试版本程序调试找bug的版本 B .Release被称为发布版本测试人员测试的就是Release版本 C .Debug版本包含调试信息不做优化。 D .Release版本也可以调试只是往往会优化程序大小和运行速度上效果最优 答案解析
A正确Debug为调试版本一般在开发完成后发布工程前调试代码都是在Debug模式下进行的
B正确Release版本最终是要发送给用户的发给用户的版本必须要没有问题测试人员就是最后一个把关的
C正确Debug版本是调试版本编译器编译时会增加一些调试信息编译器基本不会对其进行优化
D错误Release版本是不能调试的一般都是在Debug版本下调试的Release版本一般编译器会进行大量的优化删除无用的代码指令的次序调整等让其速度更快
因此选择D 第 6 题单选题 题目名称 下面程序的输出结果是 struct stu
{int num;char name[10];int age;
};void fun(struct stu *p)
{printf(%s\n,(*p).name);return;
}int main()
{struct stu students[3] {{9801,zhang,20},{9802,wang,19},{9803,zhao,18} };fun(students 1);return 0;
} 题目内容 A .zhang B .zhao C .wang D .18 答案解析
在main函数中先定义了一个stu结构体类型的数组studentsstudents指向结构体的起始位置students1 表示该数组中下标为 1 的元素因此fun的形参实际指向的是students数组中的第二个元素故打印的是wang
因此选择C