int a[3][4] = { 0 };printf("%d\n", sizeof(a));//48printf("%d\n", sizeof(a[0][0]));//4printf("%d\n", sizeof(a[0]));//16printf("%d\n", sizeof(a[0] + 1));//4 地址printf("%d\n", sizeof(*(a[0] + 1)));//4 intprintf("%d\n", sizeof(a + 1));//地址printf("%d\n", sizeof(*(a + 1)));//a[1]16printf("%d\n", sizeof(&a[0] + 1));//4 &a[0]][1]printf("%d\n", sizeof(*(&a[0] + 1)));// a[0][1] 16 对第二行解引用printf("%d\n", sizeof(*a));//16 a[0]printf("%d\n", sizeof(a[3]));//16

int a[5] = { 1, 2, 3, 4, 5 };int *ptr = (int *)(&a + 1);//跳到整个数组后面去的地址printf("%d,%d", *(a + 1), *(ptr - 1));//2  5

int a = 6;int *p = &a;printf("%p\n", p);printf("%p\n", p+0x1);//p的基类型是int +1 就是加一个int所占的字节空间printf("%p\n", (unsigned long)p+0x1);//转成整数+1printf("%p\n", (short *)p+0x1);//short 占两个字节加两个字节

const char *c[] = { "ENTER","NEW","POINT","FIRST" };const char**cp[] = { (c + 3),c + 2,c + 1,c };const 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);//*(*(cpp-1)-1)+1

这道题应该注意的是对指针cpp的操作应该区别

*cpp++  先执行解引用操作,待所有操作完成后,要执行下一行的时候,cpp的值才会改变。

++cpp 先执行++操作变量的值发生变化

cpp+1 只对指针的执行改变,变量的值并不会发生变化。

const char *a[] = { "work","at","alibaba" };const char**pa = a;pa++;printf("%s\n", *pa);//at 

int a[3][2] = { (0, 1), (2, 3), (4, 5) };//{1,3,5,0,0,0}int *p;p = a[0];printf("%d", p[0]);//1
int a[4] = { 1, 2, 3, 4 };int *ptr1 = (int *)(&a + 1);int *ptr2 = (int *)((int)a + 1);printf("%x,%x\n", ptr1[-1], *ptr2);//4,2000000printf("%p",a);//在内存中1的存法是 00000001 00000000 00000000 00000000//2                 00000010 00000000 00000000 00000000//(int)a+1 就是整数+1,指针会后移一个字节,结合内存的小端存储方式应该读出的是//00000010 00000000 00000000 00000000 //%x 十六进制 2000000

这道题涉及到了内存的存储方式,在一般的windows操作系统win32平台下,是小端字节序,即低位存到高地址上,读取也是从低位开始读。小端模式是颠倒书写顺序进行存储的

 const char *str[] = { "welcome","to","fortemedia","nanjing" };const char **p = str + 1;str[0] = (*p++) + 2;str[1] = *(p + 1);str[2] = p[1] + 3;str[3] = p[0] + (str[2] - str[1]);printf("%s\n", str[0]);printf("%s\n", str[1]);printf("%s\n", str[2]);printf("%s\n", str[3]);printf("%d\n", str[2] - str[1]);

这道题的坑在于 str[2] - str[1] 求的是 从str[]存储的位置开始到‘\0’结束。

对字符数组变量名的含义和用法不熟悉的朋友可以参见我的另几篇博客。

一维数组数组名含义解析,数组指针的使用

https://blog.csdn.net/weixin_43447989/article/details/90346271

一维数组传参、二维数组传参、一级指针传参、二级指针传参

https://blog.csdn.net/weixin_43447989/article/details/90347625

(*( void (*) ( ) ) 0  ) ()的含义,二维数组数组名的含义和用法 *(*(a+i)+j)的含义,*(a+1)+3的含义,*(a+1+1)的含义https://blog.csdn.net/weixin_43447989/article/details/90380906

关于指针的面试题,指向字符串和字符数组的单指针,二级指针,三级指针的使用。相关推荐

  1. C语言—字符串与字符数组,字符串数组与字符串指针的区别

    字符串与字符数组 字符串一定是一个char的数组,但char的数组未必是字符串.--以字符'\0'结尾的char数组就是一个字符串,但如果char数组没有以'\0'结尾,那么就不是一个字符串,只是普通 ...

  2. (C/C++学习)15.C语言字符串和字符数组

    说明:在C语言中字符串和字符数组有很多相似之处,却又有着一些不同.本文将针对其区别与联系,进行分析总结. 一.字符串 1.在C语言中,字符串是由双引号括起来的任意字符序列,如:"china& ...

  3. C语言之字符串探究(一):字符串与字符数组

    相关博文:C++之char和string字符串类探究 相关博文:C语言之数组探究(一):定义.大小.初始化.访问和三要素 相关博文:C语言之字符串探究(一):字符串与字符数组 相关博文:C语言之字符串 ...

  4. C语言中字符串和字符数组的区别

    C语言中字符串和字符数组的区别 1.基本概念 2.代码分析 3.总结 1.基本概念 字符串和字符数组很相似,但是有本质上的区别. (1) C语言中,字符串是双引号括起来的单个或多个字符的集合,编译器自 ...

  5. 【C语言进阶深度学习记录】二十六 C语言中的字符串与字符数组的详细分析

    之前有一篇文章是学习了字符和字符串的,可以与之结合学习:[C语言进阶深度学习记录]十二 C语言中的:字符和字符串 文章目录 1 字符串的概念 1.1 字符串与字符数组 1.2 字符数组与字符串代码分析 ...

  6. C语言字符串、字符数组

    代码及结果 #include <stdio.h>int main() {char *a = "hello";char b[] = "hello";p ...

  7. 【C】C语言数组与字符串(包括:字符串与字符数组)

    在程序设计中,为了方便处理,通常把具有相同类型的若干变量按有序的形式组织起来.这些按序排列的同类数据元素的集合称为数组.在C语言中,数组属于构造数据结构.一个数组可以分解成多个数组元素,这些数组元素可 ...

  8. C语言字符串与字符数组

    C语言字符串与字符数组 1. 字符串与字符数组 1.1 C 语言字符串 什么是字符串? 通俗的讲字符串是由一串字符组成,例如 "Hello World\n",即是一个字符串. C ...

  9. 字符串之字符数组种是否所有的字符都只出现过一次

    字符串之字符数组种是否所有的字符都只出现过一次 例子: chas=['a','b','c'],return true,chas=['1','2','1'],return false 解题思路: 定义b ...

  10. c语言中字符串数组应用,C语言中字符变量字符串和字符数组应用.doc

    C语言中字符变量字符串和字符数组应用 字符变量(type`char`?字符串(string)和字符数组(type`char`arrary)是C语言中非常重要的结构成分,也是应用编程中常发生混淆?导致错 ...

最新文章

  1. 杨元庆谈三年变化:IBM到底给联想带来什么?
  2. ERROR: SampleCB() - buffer sizes do not match 解决方法
  3. 里程碑 .Net7再更新,从此彻底碾压Java!
  4. qwidget多个窗口同步_Linux命令screen—终端切换,工作环境保存,画面同步,防断网...
  5. 什么是CDN ,CDN的作用
  6. confirm关闭 layer_基于 vue+layer.js 超青睐的弹窗组件VueLayer
  7. 晨哥真有料丨为什么女生从来不主动找你聊天
  8. Facebook Cache Token Issue
  9. mongodb和mysql创建表_mongodb入门命令-创建表数据(二)
  10. [小O地图-图表] - 制作全国行政区图表
  11. IIS6.0 PUT上传漏洞
  12. 安全教育思维导图模板分享
  13. 从零开始学写脚本【第一天】
  14. 阿里天池大数据竞赛——口碑商家客流量预测 A
  15. ☆苹果MAC OS X ★ 安装双系统☆
  16. React 中 Twitter 的 SVG 图标 (icons)
  17. linux登陆mysql数据库
  18. git(9)Git 内部原理,java入门视频百度网盘
  19. 7. MyBatis多表查询 - 一对一 - 一对多 - 多对多
  20. 题库(3)_计算圆周率Π

热门文章

  1. G6实现家族族谱关系图
  2. 无线路由器设置成交换机
  3. CDN 回源与文件预热
  4. 2016word多级列表 一级标题居中后偏左
  5. 硬盘格式化数据恢复的软件推荐
  6. WireShark抓取网站用户名和密码
  7. python使用win32com复制word的某一页然后粘贴到新的word页面中
  8. UCenter单点登录(简单版)
  9. CocosCreator3D之相机跟随与旋转
  10. UDA/语义分割-ColorMapGAN: Unsupervised Domain Adaptation for Semantic Segmentation Using Color Mapping G