参考:

    1.C++ 从入门到精通第三版;

    2.https://blog.csdn.net/liaoshengshi/article/details/45099923      如是多次被别人转载的地址并未侵权想法,没时间去找到底谁写的。

铺垫:

    1. 在自学的过程中感觉一本好书真的可以节约很多时间,不幸的是...。。只怪当时随便买了一本还不是vs的编译环境。。。。

    2. 最近几天本来被指针,数组,指针的指针,指针数组搞得把自己学懵了,好不容感觉有了(希望自己有时间和闲心好好总结一番发到自己微博上),准备大开s戒的时候,就被一串代码卡住了,真是心态崩了。。。。

    3. 这个问题可能也只有我这种初学者有,如果下面这段代码的调试结果你完全没有疑问请大神跳过就好!不过还是想记录自己的学习过程。

代码: 

 1 #include <iostream>
2 using namespace std;
3 void sort(char *name[],int n) // 字符串排序
4 {
5 char *temp;
6 int i,j,k;
7 for(i=0;i<n-1;i++)
8 {
9 k=i;
10 for(j=i+1;j<n;j++)
11 //下面是自己想验证strcmp()后的结果
12 {
13 cout<< strcmp(name[k],name[j]) << endl;
14 if(strcmp(name[k],name[j])>0) { k=j; cout << "I am more than zero "<< endl; }
15
16 cout << "name[K]="<< name[k]<<" "<<"K="<< k<< " "<<"Kaddress:" << name + k << endl;
17 }
18 if(k!=i)
19 {
20 temp=name[i];name[i]=name[k];name[k]=temp;
21 }
22 }
23 }
24 void print(char *name[],int n) //输出字符串元素
25 {
26 int i=0;
27 char *p;
28 p=name[0];
29 while(i<n)
30 {
31 p=*(name+i++);
32 cout<<p<<endl;
33 }
34 }
35 int main( )
36 {
37 char *name[]={"mingri","soft","C++","mr"}; //定义指针数组
38 int n=4;
39
40 int m =0;
41
42 for (m; m< 4; m++)
43 //输出起始地址
44 {
45 cout << "first address:" << name + m<< endl;
46 }
47
48 sort(name,n);
49 print(name,n);
50 return 0;
51 }
52
53 /*
54 结果如下
55
56 first address:001AFE60
57 first address:001AFE64
58 first address:001AFE68
59 first address:001AFE6C
60 -1
61 name[K]=mingri K=0 Kaddress:001AFE60
62 1
63 I am more than zero
64 name[K]=C++ K=2 Kaddress:001AFE68
65 -1
66 name[K]=C++ K=2 Kaddress:001AFE68
67 1
68 I am more than zero
69 name[K]=mingri K=2 Kaddress:001AFE68
70 -1
71 name[K]=mingri K=2 Kaddress:001AFE68
72 1
73 I am more than zero
74 name[K]=mr K=3 Kaddress:001AFE6C
75 C++
76 mingri
77 mr
78 soft
79 Press any key to continue . . .
80
81
82 */

就是对这结果不满意:

            C++
            mingri
            mr
            soft

但对自己刚学的指针知识自认没毛病,如是开启了一大批验证代码尝试,有的在家电脑,一起都是这个结果没毛病啊!

(现在想想可能是自己学了matlab原因C++又不精吧,一直认为strcmp是比较字符串长度的,虽然知道这和matlab返回值是有区别的,也仅知道这些而已)

最后我认为一定是自己对strcmp()函数认识不够造成的;

最终找到一篇令自己豁然开朗的解释:

           strcmp函数是C/C++中基本的函数,它对两个字符串进行比较,然后返回比较结果,函数形式如下: int strcmp(const char* str1, const char* str2); 其中str1和str2可以是字符串常量或者字符串变量,返回值为整形。返回结果如下规定: ① str1小于str2,返回负值或者-1(VC返回-1);

② str1等于str2,返回0; ③ str1大于str2,返回正值或者1(VC返回1);

strcmp函数实际上是对字符的ASCII码进行比较,实现原理如下:首先比较两个串的第一个字符,若不相等,则停止比较并得出两个ASCII码大小比较的结果;如果相等就接着 比较第二个字符然后第三个字符等等。无论两个字符串是什么样,strcmp函数最多比较到其中一个字符串遇到结束符'/0'为止,就能得出结果。strcmp算法的可以有多种,不过我觉的可以把这么多算法分为两种,一种是利用减法运算判断结果,另一种是利用比较运算(==)得出结果。

分析:

  这段代码所谓的排序是ASCII码排序:C=67 ,m=109, o=111, r=114, s=115

就是这么简单;结果和我的想法达到了一直,认识了这个概念

这里写这么多两点欣喜:

            1. 解决了问题不论问题大小,说明还要多学啊,学海无涯。

            2. 跟自己刚学的指针没冲突,又进了一步。    

谢谢观赏!!!       

   

指针数组学习中的小插曲真是醉了-----Strcmp用法的更多相关文章

  1. Java 打印金字塔 or 打印带数字的金字塔 (Java 学习中的小记录)

    Java 打印金字塔 or 打印带数字的金字塔 (Java 学习中的小记录) 作者:王可利(Star·星星) 效果图: 代码如下: class Star8 { public static void m ...

  2. Java 需要记得、了解的关键词 (Java 学习中的小记录)

    Java 需要记得.了解的关键词 (Java 学习中的小记录)     作者:王可利(Star·星星) 总结:本次随笔,仅且拿来平时翻阅记忆用

  3. Java学习中,常用的命令管理(Java 学习中的小记录)

    Java学习中,常用的命令管理      作者:王可利(Star·星星) 一.Window中常见的dos命令 在哪里操作dos命令: Win7 ---> 开始  ---->所有程序---& ...

  4. Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)

    Java 逻辑运算符.位运算符.移位操作符  总结     作者:王可利(Star·星星) 逻辑运算符,表格如下: 解析逻辑运算符表: 1.与 (&) 特点:两个都为真的时候,结果为真.两个为 ...

  5. spark学习中一些小问题---1

    1.linux文件查找命令.这个很关键 find / -name employees.json 2.hdfs命令上传整个文件夹或文件 hadoop dfs -put /home/root/apache ...

  6. Java数组学习之前基础小案例

    不多说,1天时间看完数组之前内容,这就靠代码的实践总结一下吧~~ 打印三角形 简单易懂,初学都会,就不注释了,前者为取巧的三角形实现方法,我注释了,直接上源码~~ public class Trian ...

  7. pytorch学习 中 torch.squeeze() 和torch.unsqueeze()的用法

    squeeze的用法主要就是对数据的维度进行压缩或者解压. 先看torch.squeeze() 这个函数主要对数据的维度进行压缩,去掉维数为1的的维度,比如是一行或者一列这种,一个一行三列(1,3)的 ...

  8. [C++学习历程]基础部分 C++中的指针数组和结构

    作者:苏生米沿 本文地址:http://blog.csdn.net/sushengmiyan/article/details/19938177 一.指针 对学习C++来说,指针是一项重要内容,以前,教 ...

  9. 记录Python学习中的几个小问题

    记录Python学习中的几个小问题,和C#\JAVA的习惯都不太一样. 1.Django模板中比较两个值是否相等 错误的做法 <option value="{{group.id}}&q ...

随机推荐

  1. OC基础--字符串

    前言 做iOS开发有3年了,从当初的小白到现在,断断续续看过很多资料,之前也写过一些博文来记录,但是感觉知识点都比较凌乱.所以最近准备抽时间把iOS开发的相关知识进行一个梳理,主要分为OC基础.UI控 ...

  2. Mybatis 枚举类处理

    目录 类型处理器(TypeHandler) 内置的枚举处理器 EnumTypeHandler源码 自定义枚举类处理 通用枚举处理器 Git 类型处理器(TypeHandler) 无论是 MyBatis ...

  3. 据说是最好的记忆工具——Anki

    http://www.ankichina.net/ .u1s1,确实挺好用,自建题库,全程自助. 可以插入文字.图片.音频,会安排合理的复习频率,可以随时同步,电脑手机版本全.

  4. 跟我一起学.NetCore之中间件(Middleware)应用和自定义

    前言 Asp.NetCore中的请求管道是通过一系列的中间件组成的,使得请求会根据需求进行对应的过滤和加工处理.在平时开发中会时常引用别人定义好的中间件,只需简单进行app.Usexxx就能完成中间件 ...

  5. JS中有趣的内置对象-JSON

    前言 在以前的web开发中,我们多数选择纯文本或XML作为我们的提交的数据格式,大多数是XML,少数纯文本.其实从AJAX(Asynchronous JavaScript and XML)的命名我们也 ...

  6. 用于测试 JsonAnalyzer2 1.01版的测试用例

    14. 原文={"animal":"ca,t","color":"ora:nge","isMale" ...

  7. mysql InnoDB引擎是否支持hash索引

    看一下mysql官方文档:https://dev.mysql.com/doc/refman/5.7/en/create-index.html , 从上面的图中可以得知,mysql 是支持hash索引的 ...

  8. oracle之创建和管理数据库用户账户

    创建和管理数据库用户账户 sys 查看数据库里有多少用户?select username from dba_users; 9.1.1用户的缺省表空间 每个用户账户都可以指定默认的表空间,用户创建的任何 ...

  9. vue3 报错解决:找不到模块‘xxx.vue’或其相应的类型声明。(Vue 3 can not find module)

    最近在用 vue3 写一个小组件库,在 ts 文件中引入 .vue 文件时出现以下报错: 报错原因:typescript 只能理解 .ts 文件,无法理解 .vue文件 解决方法:在项目根目录或 sr ...

  10. Java成神之路:第二帖---- 数据结构与算法之稀疏数组

    数据结构与算法--稀疏数组 转换方法 记录数组有几行几列,有多少个不同的值 把不同的值的元素的行列,记录在一个小规模的数组中,以此来缩小数组的规模 如图: 二维数组转稀疏数组 对原始的二维数组进行遍历 ...