C while p 與while p 的區別

2021-10-23 20:44:21 字數 1455 閱讀 4781

測試用的是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...