深圳网站建设 华信科,地方网站优势,网站开发询价函,php 网站后台模板目录 前言一、一维整型数组1.1 题目一1.2 题目二 二、二维整型数组2.1 题目一2.2 题目二2.3 题目三 三、结构体3.1 题目一#xff08;32位机器运行#xff09; 四、字符数组4.1 题目一4.2 题目二 总结 前言
本篇文章记录关于C语言指针笔试题的介绍。 一、一维整型数组
1.1 … 目录 前言一、一维整型数组1.1 题目一1.2 题目二 二、二维整型数组2.1 题目一2.2 题目二2.3 题目三 三、结构体3.1 题目一32位机器运行 四、字符数组4.1 题目一4.2 题目二 总结 前言
本篇文章记录关于C语言指针笔试题的介绍。 一、一维整型数组
1.1 题目一 题目分析 arr是首元素地址即arr[0] arr取的是整个数组的地址类型为int(*)[5]arr1跳过整个数组的大小 1.2 题目二 题目分析 %x 按16进制格式输出 arr取出的是整个数组的地址arr1为跳过整个数组的地址 ptr1指向数组最后一个元素的末尾 ptr1[-1] - *(ptr1(-1)) -*(ptr1-1)ptr1[-1] 00000004 arr表示首元素地址即arr[0] (int)arr1将地址强制转换为整型进行加法运算 ptr2指向的是数组第一个元素的第二个字节*ptr2操作四个字节*ptr2 20000000 下图以32位机器为例将12 3 4分别按16进制在内存中的存储位置如下 整数1的十六进制 00 00 00 01 高位-低位 整数2的十六进制 00 00 00 02 整数3的十六进制 00 00 00 03 整数4的十六进制 00 00 00 04 二、二维整型数组
2.1 题目一 题目分析 数组初始化时利用了逗号表达式逗号表达式的结果为最后一个表达式的结果相当于以下的初始化方式 int arr[3][2] { {1,3}, {5,0}, {0,0}} arr[0]表示第一行的数组名数组名表示首元素地址相当于arr[0][0] 则p[0] - *(p0) - *( p) - *(arr[0][0]) - arr[0][0] 1 2.2 题目二 题目分析 指针变量p是一个数组指针指向4个整型元素的数组 p[4][2] - *( *(p4) 2) 两个相同类型指针相减的绝对值为相差的元素个数 p[4][2]和arr[4][2]的位置如下如所示 p[4][2]和arr[4][2]相差4个元素则 p[4][2] - arr[4][2] -4 -4的原反补如下 原码1000 0000 0000 0000 0000 0000 0000 0100 反码1111 1111 1111 1111 1111 1111 1111 1011 补码1111 1111 1111 1111 1111 1111 1111 1100 %d输出的是原码 -4 %p输出的是地址十六进制 ff ff ff ff ff ff ff fc 2.3 题目三 题目分析 arr取整个二维数组的地址arr1跳过一个二维数组大小 *(arr1)arr数组名为首元素地址第一行的地址arr1为第二行的地址 *(arr1) - arr[1]第二行的数组名第二行第一个元素的地址 三、结构体
3.1 题目一32位机器运行 题目分析 将一个十六进制数0x100000强制转换为结构体指针变量的值则p 0x00100000 p0x01,结构体指针变量p向前走一步结构体占20个字节则跳过20个字节20的十六进制为00000014 00100000 00000010 00100014 (unsigned long)p0x01(unsigned long)p将p强制转换为一个无符号长整型则进行整型的加法运算 00100000 00000001 00100001 (unsigned int*)p0x01(unsigned int*)p将p强制转换为一个整型指针变量向前走一步跳过4个字节 00100000 00000004 00100004 四、字符数组
4.1 题目一 题目分析 ps为二级指针变量 str为数组名表示首元素地址即char*的地址 ps, ps ps1跳过一个char*的大小 4.2 题目二 题目分析 表达式一: **ppspps, pps pps1; pps指向ps[1]**(pps) str[2]; 得到字符串POINT首元素地址表达式二: * -- * pps 3, 这时的pps指向ps[1]pps, pps pps1; pps指向ps[2]*(pps) ps[2]; 得到指向str[1]的地址--*(pps)得到指向str[0]的地址*--*pps得到字符串ENTER的首元素地址*--*pps3跳过3个字符的大小得到字符串ENTER中字符E的地址表达式三: *pps[-2]3这时的pps指向ps[2]pps[-2] *(pps-2),这里的pps不会改变但表达式(pps-2)指向的是ps[0]*(pps-2) ps[0]*pps[-2] *ps[0]得到指向FIRST的首元素地址即字符F的地址*pps[-2] 3, 向前走三步得到FIRST字符S的地址表达式四: pps[-1][-1]1这时pps指向ps[2]pps[-1][-1] *(*(pps-1)-1);*(pps-1),得到ps[1]即得到指向str[2]的地址*pps-1-1得到指向str[1]的地址*(*pps-1-1),得到字符串NEW首元素地址即字符N的地址*(*(pps-1)-1)1,跳过一个字符得到字符串NEW中字符E的地址 总结
本篇文章解析了指针在各种数组应用的练习题解决这种题目最好的方法就是画图。