【一】曾经那些错误,你又踩坑了吗?(一)

简介: 【一】曾经那些错误,你又踩坑了吗?

一、for循环

初始化部分只在进入循环时运行一次! 例题1:

看for循环执行次数,那就是要看条件判断部分,y=123 &&x<4,y=123恒为真,x<4只在x从开始的前四次小于4为真,所以执行次数就为4例题2:


我们先看了解 getchar();


getchar就是在缓冲区中拿一个字符。


       ch=getchar()!='\n',就是将缓冲区的值拿出来赋给ch,在判断等不等于'\n'


       getchar()!='\n',判断从缓冲区拿出字符等不等于'\n'


是不是乍一看都是对的啊??


但你仔细发现D那不就错了!刚刚我们说过,for循环的初始化部分只执行一次,那你这不是只拿了一次,然后一直在比同一个吗

二、指针有关内容

1.*(解引用)和其他运算符

在我们了解了运算符的优先顺序以后,那么例子就来了:




A: p会先和*结合,先解引用,1009+=1,可以!


B:当然括号优先级最大,(*p)++;1009++,可以!


C:++(1009),当然可以!


前置++:先加再使用;后置++,先使用再加


D:*p++,会先和++结合,*(&p++),那肯定就不行了,不可以!

2.指针变量的移动

数组名就是数组首元素的地址

&数组名就是整个数组的地址,差别体验在向后移动

ptr=&a+1,整个数组的地址+1

*(ptr-1)此时向后移动一个单位(四个字节),指向4。

这个题和上边的是非常相似的:

a为首元素地址,所以选C

3.二维数组

int (*p)[3]是数组指针,指向类型为int且元素个数为3的数组


二维数组的数组名是首元素地址:

*(p+0)就相当于p[0],*(*(p+0)+0)就是p[0][0]


p[0][0]是第一行第一个地址的值,即为n[0][0],也就是10; p[0]是第一行的地址,p[0]+1就代表在这一行偏移一位,*(p[0]+1)等价于p[0][1],也就是20; *p等价于*(p+0),也就是p[0],所以(*p)[2]等价于p[0][2],也就是30;


B

a[i]相当于 *(a+i)

a[i][j]相当于*(*(a+i)+j);以此类推! B

每个元素占一个存储单元,说明都是char类型;


现在已知x[9][9] 地址为 0xf8b82  21c;


             x[4][4] 地址为 0xf8b82  140;


             求x[7][7]的地址


那我们必须知道之间相差多少个元素,一行的元素有多少:


为了好算,我们统一:x[4][9]= ....145,x[9][9]=...21c,那么相减就是中间5行的个数,21c-145(16进制计算)=D7(16进制),转化为10进制D*16+7=208,208/5=43,一行就有43个元素。


所以:x[7][7]就可以由x[9][7]减去2*43=86(10进制),相减转化为16进制=56


21A-56=1c4.所以答案为A

首先看到**a[3][4],下意识就要想到,会与方括号先结合,那么就是二维数组,共有12个元素,每个元素的类型是 **指针类型,12*4=48

三、逻辑运算符

我们看到这样的代码,首先得有else就近匹配,就会让代码更容易看

第一个if语句执行时,a=1,b=2为真,执行后,a=1,b=3;


第二个if语句b!=2为真,但此时重要的一点是,逻辑运算符具有短路效应,||左边为真时,右边将不会执行。(同理,&&左边为假时,也不会执行右边)


所以printf打印时,a=1,b=3,c=3;

四、存储方式,输出格式

1.输出格式

整型数据表示格式:

八进制:0123(0开头)零

16进制:0x开头 0x123

输出8进制:%o;输出16进制:%0x;

所以,m原本就是8进制数,八进制输出就是123;但n是10进制数,需要转化为8进制成173

目录
相关文章
|
存储 编解码 安全
冥王峡谷安装steamos踩坑记录
记录冥王峡谷安装第三方steamos-holoiso时遇到的一些问题,其它玩家可参考
1810 0
|
7月前
|
Cloud Native Go
面试失败的反思:如何从错误中吸取教训
面试失败的反思:如何从错误中吸取教训
34 0
|
8月前
|
存储 JSON 算法
新手避坑:盘点使用ClickHouse最容易犯的12个错误
在这篇文章中,我们突出了新手用户遇到的最常见的12个问题,这些问题是由于在使用ClickHouse的过程中,不遵循最佳实践,甚至反最佳实践而导致的。对于每一个问题,我们都推荐了一个解决方案或正确的使用方法。
2637 18
新手避坑:盘点使用ClickHouse最容易犯的12个错误
|
11月前
|
存储 编译器 C++
【一】曾经那些错误,你又踩坑了吗?(二)
【一】曾经那些错误,你又踩坑了吗?
56 0
|
11月前
|
JavaScript 前端开发 API
每个 Bug 都值得认真对待:分享一个 debug 的案例,推荐给前端实习生参考
每个 Bug 都值得认真对待:分享一个 debug 的案例,推荐给前端实习生参考
214 0
|
前端开发 计算机视觉 Python
代码报错还好说,源码报错才难搞!分享自己源码报错的解决过程!
代码报错还好说,源码报错才难搞!分享自己源码报错的解决过程!
87 0
代码报错还好说,源码报错才难搞!分享自己源码报错的解决过程!
|
测试技术
软件测试面试题:软件上线后有bug怎么处理?
软件测试面试题:软件上线后有bug怎么处理?
163 0
|
Arthas 监控 Java
看了这篇文章,比同事更快找到bug!
你以为程序员只是闷着头疯狂写bug,写好了发布到服务器就完了? 不,你还要修bug!但在那之前,你还要找bug!
171 0
|
消息中间件 存储 调度
生产环境一个问题让我直接“懵”了
生产环境一个问题让我直接“懵”了
生产环境一个问题让我直接“懵”了
|
C++
学会调试,让你也成为改bug能手
学会调试,让你也成为改bug能手
85 0
学会调试,让你也成为改bug能手