測試用的是2019.02clion編輯器
while(*p)指的是當p指向的數值不為0,或者不為』\0』時執行操作。相當於while(*p!=0||*p!=』\0』)
while( p)指的是當p存在指向時執行操作。(這個是根據結果推測的結論,分析過程和測試**如下,如有不對,還望指正!)
#include
using
namespace std;
char a[6]
="a\0p0l"
,*p;
intmain()
cout<<
"while(p): "
; p=a;
// while(p)
//會出現不斷迴圈的情況,為保證安全,用下面這種方法限制輸出
for(
int i=
0;i<
10;i++)}
return0;
}
輸出:
while
(*p)
: a while
(p): a p 0 l
分析:
*p遇到』\0』後跳出了迴圈,但p沒有,並且在這種情況下,if( p)仍判斷為真,因為從a與p的間隔可以看出是兩個』\t』。
p遇到0的時候,if( p)依然判斷為真
若不控制輸出,使用while( p),會發現進入無限迴圈,說明while( p)一直判斷為真
*p遇到0時經測試也會停止
int a[6]
=,*p;int
main()
for(
int i=
0;i<
10;i++)}
p=a;
cout<<
"if(p): "
;// while(p)
for(
int i=
0;i<
10;i++)}
return0;
}
輸出:
if
(*p):1
6234
5if(p):16
2345
004206120
0
分析:
雖然整型陣列結尾沒有』\0』結束符,但是*p依然會終止。p也依然會越界。
經測試,*p遇到0也會終止,p依然不會。
在使用指標遍歷陣列時,用while(*p)會比while( p)安全很多。雖然不知道為什麼無論怎樣while( p)都會越界,也有可能不同編輯器會有不同結果?本人知識水平有限,不能很好地解釋其中原因。如果哪位大神知道的希望可以告訴我hhhh,還有如果文章有**不對的,也希望大家能夠批評指正,畢竟我也只是乙隻小白,還需要多多改進。
與 的區別? 與 的區別?
相同點 和 都是表示與的邏輯運算子,其運算結果一致 不同點 邏輯與 當兩邊的表示式都為true的時候,整個運算結果才為true,否則為false。短路與 當第乙個表示式的值為false的時候,則不再計算第二個表示式 注意 還可以做位運算子,當表示式不是boolean型別的時候 例項1 public ...
CRM PLM SCM MES與ERP的聯絡與區別
概念crm customer relationshipmanagement,客戶關係管理 企業為提高核心競爭力,利用相應的資訊科技以及網際網路技術來協調企業與顧客間在銷售 營銷和服務上的互動,從而提公升其管理方式,向客戶提供創新式的個性化的客戶互動和服務的過程。其最終目標是吸引新客戶 保留老客戶以及...
spring與springmvc的區別與聯絡
一 spring框架的介紹 spring是乙個一站式的框架,提供了表現層 springmvc 到業務層 spring 再到資料層 springdata 的全套解決方案 spring的兩大核心ioc 控制反轉 和aop 面向切面程式設計 更是給我們的程式解耦和 的簡介提供了支援。二 springmvc...