c语言指针 —— 面试题
文章目录
- 前言
- 第一题
- 第二题
- 第三题
- 第四题
- 第五题
- 第六题
- 第七题
- 第八题
前言
一定要会画图,了解内存,数组名,指针的各种形式
初看代码是代码,在看代码是内存,最后看代码还是代码
第一题
#include <stdio.h>
int main()
{int a[5] = { 1, 2, 3, 4, 5 };int* ptr = (int*)(&a + 1);printf("%d,%d", *(a + 1), *(ptr - 1));return 0;
}
第二题
由于还没学习结构体,这里告知结构体的大小是20个字节
0x1就是1
一个结构体变量+1跳过一个结构体变量的大小
#include <stdio.h>
struct Test
{int Num;char *pcName;short sDate;char cha[2];short sBa[4];
}*p;
//结构体指针 *p指向Test结构体对象//已知,结构体Test类型的变量大小是20个字节
0x1 == 0
一定要在x86平台int main()
{printf("%p\n", p + 0x1);加的是一个结构体变量的大小printf("%p\n", (unsigned long)p + 0x1);printf("%p\n", (unsigned int*)p + 0x1);return 0;
}
第三题
%x是以十六进制形式打印
小端存储大放小,取出是从右往左取
#include <stdio.h>
int main()
{int a[4] = { 1, 2, 3, 4 };int *ptr1 = (int *)(&a + 1);int *ptr2 = (int *)((int)a + 1);((int)a+1)将a强制转换成整形,整形+1那就是+1如果a = 0x0012fff40a+1 --->0x0012ff44(int) a+1--->0x0012ff41 整形纯粹加1纯粹+1printf( "%x,%x", ptr1[-1], *ptr2);return 0;
}
第四题
( ) 逗号表达式从左往右计算
所以a[3][2] = {(0,1),(2,3),(4,5)}
里面只有后面一个有效。
所以存放的是
{1,3},
{5,0},
{0,0}
#include <stdio.h>
int main()
{int a[3][2] = { (0, 1), (2, 3), (4, 5) };int *p;p = a[0];printf( "%d", p[0]);1return 0;
}
第五题
#include <stdio.h>
int main()
{int a[5][5];int(*p)[4];p = a;printf( "%p,%d\n", &p[4][2] - &a[4][2], &p[4][2] - &a[4][2]);return 0;
}
第六题
#include<stdio.h>
int main()
{int aa[2][5] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };int *ptr1 = (int *)(&aa + 1);&&a 跳过数组大小int *ptr2 = (int *)(*(aa + 1));aa+指向首元素后面一组元素printf( "%d,%d", *(ptr1 - 1), *(ptr2 - 1));result: 10 5*(ptr1 - 1) 就是10后面的元素-1到10然后解引用拿到10*(ptr2 - 1) 就是6-1然后解引用拿到5return 0;
}
第七题
#include <stdio.h>
int main()
{char *a[] = {"work","at","alibaba"};char**pa = a;pa++;printf("%s\n", *pa);result: atreturn 0;
}
第八题
++ --操作符会产生副作用 会直接修改指向空间位置
后缀比前缀要高
所以 *- -*++cpp 要先++在- -
#include <stdio.h>
int main()
{char *c[] = {"ENTER","NEW","POINT","FIRST"};char**cp[] = {c+3,c+2,c+1,c};char***cpp = cp;printf("%s\n", **++cpp);printf("%s\n", *--*++cpp+3);printf("%s\n", *cpp[-2]+3);printf("%s\n", cpp[-1][-1]+1);return 0;
}
c语言指针 —— 面试题相关推荐
- C语言指针面试题解析(万字超多题,每题都有详解)
目录 零.前言 1.整型数组 2.字符数组 1.strlen函数 2.arr[]={'a','b','c'....}型 1.sizeof()计算 2.strlen()计算 3.char arr[]=& ...
- 全国计算机二级考试c语言指针,全国计算机等级考试二级C语言指针检测试题.doc...
. . . . 学习参考 全国计算机等级考试二级C语言指针测试题 一.选择题 (1)设有定义:int n1=0,n2,*p=&n2,*q=&n1;,以下赋值语句中与n2=n1;语句等价 ...
- c语言指针p2等于p1,C语言指针 -- 面试题
有人在群里发布了一道试题,学习一下,测试学习环境为32位机 #include int main() { int a[5] = { 1, 2, 3, 4, 5 }; int *p1 = (int*)(& ...
- c语言 指针不能赋值吗,程序员编程C语言指针答疑:指针赋值没那么简单
C语言指针,纸老虎 一.程序员编程C语言答疑合集 更多C语言学习答疑文章,请参阅:程序员编程C语言答疑文章合集 也可以加入下方我的"C语言答疑课堂"圈子,第一时间看到我给大家带来的 ...
- c语言指针笔试面试题,c语言指针面试常见问题
c语言指针面试常见问题 指针的使用,一直是c语言面试题中必考的部分,因为指针本身使用的复杂性与普适性,所以考点非常多,而且也可以与其他知识相互结合,因此我们将会使用五篇专题的篇幅来介绍指针. 分析下面 ...
- 带你刷笔试关的小怪|详解指针习题和面试题【C语言/指针/进阶】
文章目录 前言 9. 指针和数组笔试题解析 复习回顾 一维数组 字符数组 二维数组 10. 指针笔试题 笔试题1: 笔试题2 笔试题3 笔试题4 笔试题5 笔试题6 笔试题7 (#)笔试题8 结语 前 ...
- c语言50到100套,c语言51-100套试题答案及详解.pdf
c语言51-100套试题答案及详解 2 double ave=0.0; 第 51 套 试题答案及详解 3 *n=0; 4 for(i=0; i 5 ave /=N; /* 计算平均值 */ 一.程序填 ...
- 2015电大c语言,2015电大本科C语言程序设计A试题汇总.doc
2015电大本科C语言程序设计A试题汇总 2015年电大本科<C语言程序设计A>一.单选题 1.在每个C语言程序中都必须包含有这样一个函数,该函数的函数名为 A . A. main B. ...
- 在c语言程序中 对文件进行操作首先要,《C语言程序设计》试题八及答案
版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如果有侵权请立即联系:55525090@qq.com,我 ...
最新文章
- Facebook最新研究:无需额外训练AI,即可加速NLP任务
- 下载插件(贪心算法)
- linux挂载硬盘_一篇文章带你了解 linux 如何进行挂载
- linux ugo 权限 ugo即user group other
- 浅谈Linux服务器究竟设置多大交换分区合适
- 路由器+摄像头:Netgear在国内怎么走?
- ubuntu server 16.10 启用无线网卡
- 2019年广西大学硕士研究生入学《数据结构与程序设计(817)》考试大纲
- 当今 计算机已进入千家万户英语,学生英语教学论文,关于信息技术在大学英语教学中的应用探析相关参考文献资料-免费论文范文...
- 数据湖,已成为海量数据存储与分析的重要承载方式
- 【Linux】shell命令学习之find
- (44)常用终端命令总结
- Oracle并行事务回滚相关参数及视图
- memcached高速缓存学习笔记002---telnet操作memcached
- 如何配置YUM本地更新源
- cookie 设置有效期 检测cookie
- python时间处理,datetime中的strftime/strptime
- 拓端tecdat|R语言中广义线性模型(GLM)中的分布和连接函数分析
- 小程序使用javascript-obfuscator工具进行代码混淆处理
- maxpooling反向传播