C語言中乙個strcmp和 的比較問題

2021-07-01 22:40:30 字數 938 閱讀 3844

在問答上看到乙個問題,本著賺金幣的態度就回答了一下。話說遇到我這樣的小白會的問題的機率真心不大,趕緊答乙個。

c++中strcmp和 ==的比較問題

c++strcmp

char *str1 = 「hello」;

char str2 = 「hello」;

if (str1 == 「hello」)

printf(「ok1\n」);

if (str2 == 「hello」)

printf(「ok2\n」);

if (strcmp(str1, 「hello」))

printf(「ok3\n」);

if (strcmp(str2, 「hello」))

printf(「ok4\n」);

輸出結果是ok1,為什麼呢?

為了更好地看到比較結果,我改寫了程式:

main()

輸出結果是1,0,0,0,說明

1. str2 == 「hello」是不成立的。字串的比較不能用==

2. strcmp(str1,」hello」),strcmp(str2,」hello」)都是成立的,因為成立的時候strcmp裡邊兩個引數相等的時候值為0

由於」hello」是字串常量,編譯器會進行優化:

所有的」hello」都是相同的,整個程式中只需要有乙個」hello」字串。然後所有引用」hello」這個字串的「指標變數」都賦值成相同的位址。所以:

char *str1 = 「hello」;和」hello」的位址是相同的

對於:char str2 = 「hello」;,這裡str2並不是指標,型別裡已經說明它是乙個陣列,所以這會是另乙個記憶體位址,於是str2與」hello」的位址是不同的。

C語言中乙個簡單的計時方法

clock 捕捉從程式執行到clock 被呼叫時所用的時間,單位為clock tick,即時鐘打點。常數clk tck 機器每秒鐘所走的時鐘打點數。不同的機器該常數不同 用此方法計時時的模板 include stdio.h include time.h clock t start,stop cloc...

C語言中乙個程式多次使用scanf函式

今天覆習遇到了乙個函式主體使用多次scanf函式的情況。但是在實際執行中發現只有第乙個scanf正常賦值了,之後的scanf函式均未賦值,被賦值為回車。include include double cal double a1,double b1,double a2,double b2 int mai...

C語言中的乙個鍊錶!

struct element struct element newelement char name char pwd int add struct element head,struct element ele while head next 0 head next ele return 1 st...