当前位置:首页 > 技术知识 > 正文内容

C语言编程经典案例(指针系列一)——一个符号引发的杯具

maynowei7个月前 (09-04)技术知识90

前几期的c语言经典算法,得到了很多朋友的响应,很多期待我不要停更,而小编当然也是一个有理想有道德有人品有颜值的人,当然要把自己的IT编程人生继续下去,所以请大家继续多多关注我们,让我们有动力继续下去。今天,我们逐步深入到c语言的核心地带,被很多C语言学习者誉为C语言终极奥义的指针问题。

其实,对于c指针,我们主要抓住它的本质。指针,就是一个地址。比如同学甲的宿舍是213,则213就可以看成同学甲床铺的一个“指针”,这个指针所指向的“内容”就是同学甲的床铺。理解这点,再加上一定的练习和积累,就可以熟练将指针运用在编程之中了。下面几期我会逐步把一些经典程序案例首发到头条,希望各位朋友指点和讨教,共同进步,就像下面这样,人生是多么美好。

题目:统计一字符串在另一字符串出现的次数。

这个题目涉及到两个字符串,利用指针完成的话,就是让短字符串的首字符和长字符串分别对比,符合一定条件就可以判定找到匹配字符串,计数器加一。不过需要提醒的是,编程中一个小插曲还是值得深思的。下面先贴上代码。

#include<stdio.h>

int count=0;

main()

{

char *sub_str="nb";

char *str="gonbonienbest";

char *p1,*p2;

p1=sub_str,p2=str;

while(*p2!='\0')

{

do

{

if(*p1!=*p2)break;

p1++;p2++;

}while(*p1==*p2);

if(*p1=='\0'){count++;}

p2++;

p1=sub_str;

}

printf("重复次数%d\n",&count);

}

结果,小编满心欢喜,马上运行测试。结果被现实打了一个响亮的巴掌。

什么,重复次数count=4370008?这是绝逼不对啊。问题在哪里?看看程序,分析了下算法部分,没啥问题啊。于是,按下F11,开始调试,调试过程也是相当的顺溜,没啥问题,但是最后的代码,我发现,在调试窗口的count的确是2,原来问题是我把输出部分的count加了一个取地址符号&!!!!去掉这个取地址符号&,就运行正确了!

编程如人生,马虎不得。这就是编程带给我们的重要人生启示之一吧。

相关文章

微软明年要停止SQL Server 2005的技术支持了

站长之家(Chinaz.com)12月28日消息据外媒消息称,微软将于明年停止为SQL Server 2005提供技术支持,即不再为其提供新的安全补丁、新功能、应用升级等服务。且表示在停止技术支持后,...

有了这份900多页的Android面试指南,你离大厂Offer还远吗?

前言对于大部分程序员来说,一线互联网是的工作经历是毕生的追求,实际上大厂对于学历的要求远远没有我们想象的那么高,近几年来,互联网公司更注重技术,所以提升自身技术水平才是斩获offer的制胜关键。一线互...

C语言编写多线程,什么时候要使用互斥锁?为什么要使用互斥锁?

在多线程编程中,当多个线程同时访问共享资源(如变量、文件等)时,会出现竞态条件(Race Condition)问题,导致程序的行为不可预测。为了避免这种问题,需要使用互斥锁来保护共享资源的访问。互斥锁...

什么?Java 中的锁还有状态?(java中的锁都有哪些类型)

线程如果锁住了某个资源,致使其他线程无法访问的这种锁被称为悲观锁,相反,线程不锁住资源的锁被称为乐观锁,而自旋锁是基于 CAS 机制实现的,CAS又是乐观锁的一种实现,那么对于锁来说,多个线程同步访问...

不需安装oracleclient连接oracle数据库方案

在Oracle官方发布ODP.net之前,我们通常使用微软的System.data.OracleClient进行Oracle数据库操作,它的缺点是必须要装Oracle客户端OracleClient,如...

python-oracledb——利用python连接Oracle数据库的好用方法

这篇文章最早发布在CSDN了,最近想尝试使用一下头条,重新转移过来了。背景介绍之前使用的数据库一直是MySql,偶尔使用PostgreSQL,都是利用的数据库连接池使用;最近需要在Oracle数据库取...