笔试题1

#include <stdio.h>int main()
{int a[4] = { 1, 2, 3, 4 };int* ptr1 = (int*)(&a + 1);int* ptr2 = (int*)((int)a + 1);printf("%x,%x", ptr1[-1], *ptr2); // 4,2000000 return 0;
}


笔试题2

#include <stdio.h>int main()
{int a[3][2] = { (0, 1), (2, 3), (4, 5) };int* p;p = a[0];printf("%d", p[0]);return 0;
}

笔试题3

#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;
}


笔试题4

#include <stdio.h>int main()
{int aa[2][5] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };int* ptr1 = (int*)(&aa + 1);int* ptr2 = (int*)(*(aa + 1));printf("%d,%d", *(ptr1 - 1), *(ptr2 - 1));return 0;
}


笔试题5

#include <stdio.h>int main()
{char* a[] = { "work","at","alibaba" };char** pa = a;pa++;printf("%s\n", *pa);return 0;
}


笔试题6

#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;
}


指针笔试题1链接



字符串左旋

题目名称:
字符串旋转结果
题目内容:
写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串。

#include <stdio.h>
#include <string.h>void left_move(char* arr, int k)
{int i = 0;int len = strlen(arr);for (i = 0; i < k; i++){// 左旋1个字符// 1、保存第一个字符char tmp = *arr;// 2、把后续的字符依次往前移动int j = 0;for (j = 0; j < len - 1; j++){*(arr + j) = *(arr + j + 1);}// 3、把保存好的第一个字符存放在最后*(arr + len - 1) = tmp;}
}int main()
{char arr[] = "abcdef";left_move(arr, 2);printf("%s\n", arr);return 0;
}

方法二:
ABCDEF
逆序2个字符
1、逆序左边:BA FEDC
2、逆序右边:BA FEDC
3、逆序整体:CDEFAB

#include <stdio.h>
#include <string.h>
#include <assert.h>void reverse(char* l, char* r)
{assert(l && r);while (l < r){char tmp = *l;*l = *r;*r = tmp;l++;r--;}
}void left_move(char* arr, int k)
{assert(arr);int len = strlen(arr);k %= len;reverse(arr, arr + k - 1); // 逆序左边reverse(arr + k, arr + len - 1); // 逆序右边reverse(arr, arr + len - 1); // 逆序整个字符串
}int main()
{char arr[] = "abcdef";left_move(arr, 2);printf("%s\n", arr);return 0;
}

判断字符串旋转结果

题目名称:
字符串旋转结果
题目内容:
写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串。

例如:给定s1 =AABCD和s2 = BCDAA,返回1

给定s1=abcd和s2=ACBD,返回0.

AABCD左旋一个字符得到ABCDA

AABCD左旋两个字符得到BCDAA

AABCD右旋一个字符得到DAABC

#include <stdio.h>
#include <assert.h>
#include <string.h>void reverse(char* l, char* r)
{assert(l && r);while (l < r){char tmp = *l;*l = *r;*r = tmp;l++;r--;}
}void left_move(char* arr, int k)
{assert(arr);int len = strlen(arr);k %= len;reverse(arr, arr + k - 1); // 逆序左边reverse(arr + k, arr + len - 1); // 逆序右边reverse(arr, arr + len - 1); // 逆序整个字符串
}// 判断arr2是否是arr1旋转得到的
int is_left_move(char arr1[], const char arr2[])
{int len = strlen(arr1);int i = 0;for (i = 0; i < len; i++){left_move(arr1, 1);if (strcmp(arr1, arr2) == 0)return 1;}return 0;
}int main()
{char arr1[] = "ABCDEF";char arr2[] = "BCDEFA";int ret = is_left_move(arr1, arr2);if (ret == 1)printf("YES\n");elseprintf("NO\n");return 0;
}

方法二:

#include <stdio.h>
#include <assert.h>
#include <string.h>void reverse(char* l, char* r)
{ assert(l && r);while (l < r){char tmp = *l;*l = *r;*r = tmp;l++;r--;}
}void left_move(char* arr, int k)
{assert(arr);int len = strlen(arr);k %= len;reverse(arr, arr + k - 1); // 逆序左边reverse(arr + k, arr + len - 1); // 逆序右边reverse(arr, arr + len - 1); // 逆序整个字符串
}// 判断arr2是否是arr1旋转得到的
int is_left_move(char arr1[], char arr2[])
{assert(arr1 && arr2);int len1 = strlen(arr1);int len2 = strlen(arr2);if (len1 != len2)return 0;// 1、给arr1的后面追加一个arr1字符串strncat(arr1, arr1, len1);// 2、判断arr2是否为arr1的子串if (NULL == strstr(arr1, arr2)){return 0;}else{return 1;}
}int main()
{char arr1[20] = "AABCD";// AABCDAABCD 给arr1追加arr1char arr2[] = "BCDAA";int ret = is_left_move(arr1, arr2);if (ret == 1)printf("YES\n");elseprintf("NO\n");return 0;
}

字符串追加 strcat

int main()
{char arr[20] = "abc";// strcat - 字符串追加strcat(arr, "def");// strncat - 字符串追加自己strncat(arr, arr, 3);char arr1[] = "abcdefabcdef";char arr2[] = "def";// strstr - 查找字符串char* ret = strstr(arr1, arr2); // 查找arr1中有没有arr2,返回arr1中第一次出现的arr2的起始地址if (ret == NULL){printf("找不到\n");}else{printf("找到了:%s\n", ret);}
}

杨氏矩阵

杨氏矩阵
题目内容:
有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。

要求:时间复杂度小于O(N);

#include <stdio.h>void find_k(int arr[3][3], int k, int r, int c)
{int x = 0;int y = c - 1; // 从左上角开始找while (x < r && y>= 0){if (arr[x][y] < k)x++;else if (arr[x][y] > k)y--;else{printf("找到了,下标是:%d %d\n", x, y);return;}}printf("找不到\n");
}int main()
{int arr[3][3] = { 1,2,3,4,5,6,7,8,9 };int k = 7;find_k(arr, k, 3, 3);return 0;
}

把找到的坐标带回:

#include <stdio.h>void find_k(int arr[3][3], int k, int *px, int *py)
{int x = 0;int y = *py - 1; // 从左上角开始找while (x < *px && y >= 0){if (arr[x][y] < k)x++;else if (arr[x][y] > k)y--;else{*px = x; // 带回main中的x,y*py = y;return;}}*px = -1;*py = -1;
}int main()
{int arr[3][3] = { 1,2,3,4,5,6,7,8,9 };int k = 7;int x = 0;int y = 0;// &x &y// 输入 输出// 返回型参数find_k(arr, k, &x, &y);printf("找到了,坐标是:%d %d\n", x, y);return 0;
}

用结构体:

#include <stdio.h>struct Point
{int x;int y;
};struct Point FindNum(int arr[3][3], int row, int col, int k)
{int x = 0;int y = col - 1;struct Point ret = { -1,-1 };while ((x<=2) && (y>=0)){if (arr[x][y] == k) // 第一行最后一个元素{ret.x = x;ret.y = y;return ret;}else if (arr[x][y] > k){y--;}else{x++;}}return ret;
}int main()
{int arr[3][3] = { 1,2,3,4,5,6,7,8,9 };struct Point ret = FindNum(arr, 3, 3, 7);if ((ret.x != -1) && (ret.y != -1))printf("找到了,下标是:%d %d\n", ret.x, ret.y);elseprintf("找不到\n");return 0;
}

指针笔试题及其解析、字符串左旋、字符串追加strcat相关推荐

  1. 这八道经典指针笔试题你都会做嘛?

    本文详细介绍了八大指针经典笔试题,内涵盖指针大部分的用法, 全部了解掌握其原理之后对指针的学习大有帮助!!! 对指针掌握 也就掌握了内存,C语言也就没有什么更绕的了 详解八道经典指针笔试题 一.八道经 ...

  2. 【维生素C语言】练习:画图解析C语言指针笔试题

    原标题:" 祖安猎码人"在线手撕代码画图解析[C指针笔试题] 前言: C语言指针笔试题,建议做完后再看答案.本篇博客有详细的解析部分,对每一道题进行深度的画图解析.如果你想复习下指 ...

  3. 【C语言】大厂指针笔试题(1码+1图)详解——程序结果判断题

    C指针相关系列 1.一篇就够了(建议收藏)--超详解sizeof与strlen的用法 2.C语言之深入指针进阶(建议收藏以备不时之需) 3.回炉重造的C之指针+结构体 [C语言]大厂指针笔试题详解(1 ...

  4. 八道C语言指针笔试题——拿捏指针

    第一题 //请问输出什么? #include <stdio.h> int main() {int a[5] = { 1, 2, 3, 4, 5 };int* ptr = (int*)(&a ...

  5. 【C语言】八道经典指针笔试题(详解)

    目录 需要用到语法 笔试题1: 解析: 笔试题2: 解析: 总结: 笔试题3: 解析: 笔试题4: 解析: 笔试题5: 解析: 笔试题6: 解析: 笔试题7: 解析: 笔试题8: 解析: 总结: C语 ...

  6. 进阶C语言:指针笔试题

    在学习完进阶C指针之后,可以来做一些笔试题来进行提升.巩固,小编在这里给大家分享几道比较有意思的笔试题 目录 一.笔试题1: 二.笔试题2 三.笔试题3: 四.笔试题4: 五.笔试题5: ​编辑 六. ...

  7. C指针笔试题,蛋疼的多重指针运算,谭浩强的阴影

    对指针的概念清晰的话,做这种题只要耐心就行,然而看这种题就烦(被同学吐槽为谭浩强的阴影--草泥马这种C风格题有意义吗?出题人脑子被门夹了?而且C++11都不支持字面值字符串直接转换成char*了.好吧 ...

  8. C语言---指针笔试题

    第一题:. (&a)就得到了一个int(*)[5]这样的一个数组指针.再+1就跳过了整个数组,指向了5后面的那个位置. *(a+1)=a[1]=2;   *(ptr-1)=跳一个元素指向5 i ...

  9. 4道经典指针笔试题讲解 ~

最新文章

  1. 即使被拖库,也可以保证密码不泄露
  2. 微软Windows 7实现10秒启动的背后
  3. Idea开发Java WEB 应用
  4. 《糖豆人:终极淘汰赛》成功背后蕴含了何种设计?
  5. 《响应式web设计》读书笔记(三)拥抱流式布局
  6. java eclipse profile_在 Eclipse 中集成JProfiler 进行 JAVA 项目性能分析
  7. 马来西亚 IT 决策者正转向开源来最大化 IT 功能
  8. Table(name=“xx“)与Entity(name=“xx“) 问题
  9. matlab设计凸轮轮廓代码_数控铣床搞定曲轴、凸轮轴粗加工的奥秘、高招与绝对细节经验...
  10. NPM 上传自己的包
  11. 房产管理系统下载和安装步骤
  12. 课堂经验值管理小程序_济南小程序开发,微信小程序应用开发实现单店管理
  13. ssl证书下载与安装 – 如何下载ssl证书
  14. 商业研究(17):以小见大,看互联网经济(4个股权众筹平台,4个领域,10个项目,8个图)
  15. 壳聚糖/纳米金水凝胶/纳米木质素/掺杂二硫化钼/微米级Ag2O2掺杂壳聚糖水凝胶的制备研究
  16. 声学感知刻度(mel scale、Bark scale、ERB)与声学特征提取(MFCC、BFCC、GFCC)
  17. netty_channal学习
  18. 读书笔记:《关于上班这件事--自序·朱德庸》
  19. 3dsMax---期末设计[CC‘s 游乐园’]
  20. 打印机复印身份证方法

热门文章

  1. python r转义_Python快速入门系列之二:还学不会我直播跪搓衣板
  2. Java:线程并发工具类
  3. 针对于lvs分发mysql的监控
  4. 一个拖拽的效果类和dom-drag.js
  5. 流量管理的7大技术流派
  6. 修改Extmail和Extman的源代码增加公司部门和中文名字段
  7. 如何把一个bin文件捆绑到一个可执行文件exe中?
  8. win32调用系统颜色对话框
  9. Algorithm Gossip (21) 最大访客数
  10. HDU 3586 Information Disturbing (树形DP,二分)