重溫c語言之,7天開整,就是隨便的寫寫,第三天+第四天版

我是一个小笨蛋發表於2024-11-03

一:指標

  1、關於指標的含義---粗略

  例如:int a=10;

     int* p=&a;

     這裡的*,是說明p是指標變數,int 說明p是指向的物件是int型別的

     *p=20, 這裡的*是解引用符,意思是透過p中存放的地址,找到p所指向的物件,*p就是p指向的物件

  2、關於指標的大小

    指標變數的大小取決於地址存放所需要多大的空間

    32位機器上面的地址:32bit----4位元組,所以指標變數的大小是4位元組

    64位機器上面的地址:64bit----8位元組,所以指標變數的大小是8位元組

    例如:

   int *p1;
    char *p2;
    float *p3;
    double *p4;
    printf("%zu\n", sizeof(int *));
    printf("%zu\n", sizeof(char *));
    printf("%zu\n", sizeof(float *));
    printf("%zu\n", sizeof(double *));

  結果就是:

    8
    8
    8
    8

  

二:關鍵字

  define-----預處理指令,不是關鍵字

三:迴圈

  1、if-else

  如果沒有{}這個的話,else與最近的if進行匹配,例如:

#include <stdio.h>
int main()
{
    int a = 0;
    int b = 10;
    if (a == 1)
        printf("congratulations!");
        if (b == 10)
            printf("good");
        else
            printf("bad");

    printf("");
    return 0;
}

  結果是:good

  然而我想要的結果不是這個,所以需要一個大括號來進行相對應的匹配

 1 #include <stdio.h>
 2 int main()
 3 {
 4     int a = 0;
 5     int b = 10;
 6     if (a == 1)
 7     {
 8         printf("congratulations!");
 9         if (b == 10)
10         {
11             printf("good");
12         }
13     }
14     else
15     {
16         printf("bad");
17     }
18     printf("");
19     return 0;
20 }

  這次程式碼的結果就是我想要的:bad

  2、判斷小提示

    建議需要用到判斷的時候,能將數字放在左邊,變數放在右邊,例如:

1 if (1 == a)
2     {
3         printf("congratulations!");
4         if (10 == b)
5         {
6             printf("good");
7         }
8     }

    當然了,我之前的程式碼就是不大好,沒有這樣做,如果粗心的話,少了一個等號啥的,就可以報錯了(前提條件下:左邊是變數)

  3、switch-case

    這個語句可以巢狀,一個break只能跳出當前的switch-case語句;如果沒有break的話,會找到符合條件的case語句下面,之後一直執行,直到之後的全部執行完成

  4、字元的輸入

    當希望從鍵盤上面輸入一個字元的時候,可以用到這個函式-----getchar()來進行輸入,但是這個函式和庫函式里面的scanf()函式差不多,這個兩個函式在輸入的時候,都需要把鍵盤裡面的資料放入快取區內部,就像下面圖片的內容:

scanf() 快取區 鍵盤
getchar() 快取區 鍵盤

    這上面的表格就是,從鍵盤上面輸入,進入快取區,之後就是這兩個可以從快取區來獲得資料,但是這兩個獲取資料的多少不大相同,就比如下面的一個例子:

 1 #include <stdio.h>
 2 int main()
 3 {
 4     char passward[20] = {0};
 5     printf("請輸入密碼:>");
 6     scanf("%s", passward);
 7 
 8     // getchar();//粗略的把換行符獲得,只是單個單詞/詞語,如果想要一行的話,就會出現錯誤
 9     int ch = 0;
10     while ((ch = getchar()) != '\n')
11     {
12         ;
13     }
14     /*
15     這裡是每次迴圈都會從快取區內取出下一個字元,並賦值給ch,迴圈體內是空字元,所以這個迴圈只有讀取與丟棄,不做任何處理,直到這個迴圈遇到
16     換行符'\n',這個迴圈才會直接退出。原因是:這個無論是scanf還是getchar,都需要把從鍵盤裡面獲取的資料,放置到快取區內,包括換行符而
17     getchar遇到換行符'\n',也會執行換行符的操作,所以,接下來的操作可能會受到影響,故希望運用一個東西來把這個問題給處理了,所以可以用到
18     while這個空迴圈
19      */
20     printf("請確認密碼:Y/N:>");
21     char ret = getchar();
22     if ('Y' == ret)
23     {
24         printf("yes\n");
25     }
26     else
27     {
28         printf("no\n");
29     }
30 
31     return 0;
32 }

    注:這裡的一些註釋可能有些冗雜,見諒

最後,希望lol能有個冠軍,今年the shy迴歸,希望能那個冠軍下來,今天早上的blg盡力了,但是奈何飛科的加里奧摧毀了全華班奪冠的希望,破損了,感覺機會不是很大了,畢竟飛科都28了,但是加油呀,大家

相關文章