题目

下面这段代码输出什么?

先别急着百度,先想先这个代码可能输出什么,一不小心你就失去了自主学习的机会了。

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

我们分析分析

a是一个数组,这个数组存的类型是 char * 类型,所以是这个样子的。

pa 是一个二级指针变量,这个指针变量的初始化地址的 a 的首元素的地址,所以pa的值和 &a[0]是一样的。

pa 是一个指针变量,pa 初始化的是 &a[0] ,也就是这个数组的首地址。

感觉有人还不是很理解这个东西,pa 存在的是 a[0] 的地址,所以通过 * 这个钥匙就可以拿到 pa里面的东西,a[0] 里面的东西是什么类型的?看 a的定义我们可以知道,里面存的是 char * 字符串。

print("%sn",*pa);

应该输出的是 “work”字符串。

但是呢,题目里面对 pa进行了自加运算,那 pa 存的地址就不是这个了。

这个 pa++ 我们应该如何去理解,或者它本来就应该进行什么运算呢?

pa++

pa 是什么?

pa 是一个指针变量。

pa 的类型是什么?

pa 的类型是 char ** 类型,就是二级指针变量,也就是他存的是指针变量的地址。

所以正常是这样使用

#include<stdio.h>
#include<stdlib.h>
int main()
{char *p = "weiqifa";char **pa = &p;printf("%sn",*pa);return 0;
}

回到上面的代码,pa既然是指针变量,**那么pa++就是指向这个指针变量的下一个元素的地址**。

举个例子说指针

#include<stdio.h>
#include<stdlib.h>
int main()
{char a = 'p';char *p = &a;char **p1 = &p;char ***p2 = &p1;char ****p3 = &p2;char *****p4 = &p3;char ******p5 = &p4;*&a = '3';printf("%c %c %cn",***p2,******p5,a);system("pause");return 0;
}

* a是一个别名,这个别名代表一个地址,这个地址里面存的是一个字符 ‘p’

* p因为它的前面有一个 * 所以 p是一个指针变量,它存的是东西是地址,它存的这个地址里面存的是一个 char 。

* p1 因为它前面有一个 * 所以 p1 是一个指针变量,它存的是东西是地址,它存的这个地址里面存的是一个char *

* p2 因为它前面有一个 * 所以 p2 是一个指针变量,它存的是东西是地址,它存的这个地址里面存的是一个char * *

* p3 因为它前面有一个 * 所以 p3 是一个指针变量,它存的是东西是地址,它存的这个地址里面存的是一个char * * *

* p4 因为它前面有一个 * 所以 p4 是一个指针变量,它存的是东西是地址,它存的这个地址里面存的是一个char * * * *

* p5 因为它前面有一个 * 所以 p5 是一个指针变量,它存的是东西是地址,它存的这个地址里面存的是一个char * * * * *

我们分析下 char * * * * * 这个是什么?

这个是一个类型,也可以是说明属性,在汉语里面,可以理解为形容词,形容词后面如果没有名词,是没有意义的。

就比如说 「我非常」,主谓宾,没有后面的一个词来辅助,它没有意义。

char * * * * * 也是一样,它后面需要加一个东西,应该是后面需要加一个地址,指明这个地址是干什么的。

比如 char * * * * * pt

c++ 字符串数组长度排序_C指针和字符串数组相关推荐

  1. c++ 一维数组长度_每天一点C / 一维数组和指针

    哈喽,我是老吴,继续记录我的学习心得. 每天一点系列是我对微习惯的践行.现在能做到每天一点 C,将来就会有更多的每天一点系列,没人规定嵌入式软件工程师就只能学习 C 语言和折腾 Linux,不要给自己 ...

  2. Java 解决数组长度不可变问题 Java 重新定义数组

    // 解决数组长度不可变的问题 // 因为数组在定义的时候已经给定了长度,所以如果有新的元素加入,数组的本身已经放不下了 // 这时候就需要重新将原数组的元素拿出来重新定义数组,将旧元素和新元素重新赋 ...

  3. c++ 字符串数组长度排序_数组 | 后缀数组的求法及应用

    作者:Andy__lee 链接:https://blog.nowcoder.net/n/6b4a93e186ed4a358321de6a7c3b4f19 来源:牛客网 定义 维基百科 - 后缀数组 让 ...

  4. Oracle 根据字符串的长度排序

    转自:http://blog.csdn.net/ft305977550/article/details/41121285 select * from student s where s.sno=183 ...

  5. linux c 指针数组定义数组长度,C/C++指针数组和 迪士尼源码搭建下载 数组指针...

    迪士尼源码搭建下载[ 指针数组 : 存放指针的数组 其定义抽象为:指向变量的类型 * 数组名称 [数组长度]. int *p[2]; p[0] = NULL; p[1] = NULL; 2. 数组指针 ...

  6. c ++中字符串长度的_C ++中的字符串长度

    c ++中字符串长度的 The string length in C++ can be calculated or found by various methods. Here, in this tu ...

  7. c语言 指针到字符串,C语言中的指针和字符串

    前言 务必理解指针与内存模型,不要死记硬背. 内存里的字符串 C语言中的字符串一般是char *类型的,这是怎样存在内存中的呢? cchar *s = "NIHAO"; | s:4 ...

  8. python中对比数组长度_在Python中检索数组长度的首选方法

    python中对比数组长度 The __len__() is a method on container types. However, python also provides another op ...

  9. 二维数组传入函数_C++二维动态数组memset()函数初始化

    来源:https://blog.csdn.net/longhopefor/article/details/20994919 先说说memset函数: void *memset(void *s,int ...

最新文章

  1. 结合深度学习的图像修复怎么实现?
  2. ace.js ajax 跳转,ace.js中文使用手册,收集比较全面
  3. iOS之HTTP和HTTPS的基本知识和应用
  4. 汉诺塔(Tower of Hanoi) 递归代码实现 c语言(顺序栈实现)
  5. 如何通俗理解拉格朗日对偶问题(part1)
  6. 牛客网-数据结构笔试题目(五)-动态规划问题求解
  7. C++ 为什么要用覆盖(学习笔记)
  8. 【收藏】RPM包制作和spec文件详解
  9. c语言编译器pellc,单片机C语言程序的设计实训100例_基于8051+PROTEUS仿真1
  10. 222、pom.xml、.iml文件的作用与意义 2019.11.08
  11. 自动控制原理_卢京潮_自动控制一般概念及数学模型_学习笔记
  12. 飞轮效应中的复利:相信时间的力量
  13. 2023年南开大学税务专硕考研上岸前辈备考经验指导
  14. 2016-2017 ACM-ICPC, Egyptian Collegiate Programming Contest (ECPC 16) 题解
  15. mysql通过触发器获取数据表的操作id_MySQL触发器初试:当A表插入新记录,自动在B表中插入相同ID的记录...
  16. Android WebView 视频播放,全屏按钮不显示或灰显解决方案
  17. UPS的红单和蓝单的区别
  18. 开发过程中 勘误表errata注意事项
  19. html交叉轴排列,CSS Flex 交叉轴水平方向
  20. 【计算机毕业设计】旅游网站源码

热门文章

  1. UVA 1622 Robot
  2. 1、ASP.NET MVC入门到精通——新语法
  3. Android 之 LogDog
  4. c#中结构体和类的比较
  5. 如何让人工智能更加实际的辅助网络安全
  6. StoreFront 登陆页面的话持续时间
  7. Citrix 未注册解决办法
  8. 一个实现生产和消费的例子(并且使用了接口和反射技术,动态调用方法)小框架...
  9. 【ABAP】在线预览文档对象的开发实现
  10. SAP Sybase Adaptive Server Enterprise:高性能,低风险