溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

【小白到大牛之路12】交換機(jī)后臺(tái)管理之端口管理的再次優(yōu)化

發(fā)布時(shí)間:2020-05-27 05:06:05 來(lái)源:網(wǎng)絡(luò) 閱讀:668 作者:wx5de7b5143d243 欄目:編程語(yǔ)言

項(xiàng)目12交換機(jī)后臺(tái)管理之端口管理的再次優(yōu)化
項(xiàng)目精講

1.為什么要使用指針

函數(shù)的值傳遞,無(wú)法通過(guò)調(diào)用函數(shù),來(lái)修改函數(shù)的實(shí)參。

2.指針定義

指針是什么

指針本質(zhì)是一個(gè)地址值:

#include <stdio.h>

int main(void){
    int age;

    //定義了一個(gè)指針
    //指針是一個(gè)變量
    //這個(gè)變量的名稱是 p
    //這個(gè)指針,可以用來(lái)指向一個(gè)整數(shù)!
    //就是說(shuō):p的值是一個(gè)整數(shù)的地址?。?!
    int * p;

    //指針p指向了age
    //p的值,就是變量age的地址
    p = &age;

    scanf("%d", p);

    printf("age=%d\n", age);
    return 0;
}

指針的定義

int p;
或者:
int
p;
或者:
int * p;

c語(yǔ)言中的指針,占用4個(gè)字節(jié)。

3.指針的初始化、訪問

指針的初始化
【小白到大牛之路12】交換機(jī)后臺(tái)管理之端口管理的再次優(yōu)化
demo:

#include <stdio.h>

int main(void) {
    int mygirl = 18;
    int *p1 = &mygirl;

    int *p2 = p1;
    return 0;
}
指針的訪問

訪問指針
demo

#include <stdio.h>

int main(void) {
    int mygirl = 18;
    int *p1 = &mygirl;
    int *p2 = p1;

    //1. 訪問(讀、寫)指針變量本身的值?。?!(和其他普通變量的訪問方式相同)
    int *p3;
    p3 = p1; //讀指針p1的值, 設(shè)置指針p3的值

    printf("p1=%d\n", p1); //不建議使用該方式

    //使用16進(jìn)制打印,把地址值當(dāng)成一個(gè)無(wú)符號(hào)數(shù)來(lái)處理的
    printf("p1=0x%p\n", p1);  
    printf("p1=0x%x\n", p1);  
    printf("p1=0x%X\n", p1);  

    return 0;
}

2進(jìn)制與16進(jìn)制(補(bǔ)充)
10進(jìn)制,2進(jìn)制,16進(jìn)制

10進(jìn)制:
每一位,有10種狀態(tài)(0,1,2,3,4,5,6,7,8,9),逢10進(jìn)1

2進(jìn)制:
計(jì)算機(jī)只識(shí)別2進(jìn)制
每一位,有2種狀態(tài)(0,1)

16進(jìn)制:
每一位,有16種狀態(tài)(0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f)
為了描述方便,我們常常把一些二進(jìn)制數(shù)據(jù),轉(zhuǎn)換為16進(jìn)制表示

比如:
10進(jìn)制:257
二進(jìn)制:100000001
16進(jìn)制:0x101
訪問指針?biāo)赶虻膬?nèi)容
【小白到大牛之路12】交換機(jī)后臺(tái)管理之端口管理的再次優(yōu)化

#include <stdio.h>

int main(void) {
    int my_girl = 18;
    int *p = &my_girl;

    int x;
    x = *p;  //*是一個(gè)特殊的運(yùn)算符,*p表示讀取指針p所指向的變量的值
    printf("x=%d\n",  x);

    printf("*p = %d\n", *p);
    my_girl++;
    printf("*p = %d\n", *p);

    return 0;
}

4.空指針

1.什么是空指針?

空指針,就是值為0的指針。
int *p;
p = 0;

2.訪問空指針的后果
#include <stdio.h>

int main(void) {
    int  *p;
    p = 0;  //p就是一個(gè)空指針!

    printf("%p\n", p);

    //訪問空指針指向的值,將導(dǎo)致程序崩潰?。?!
    printf("%d\n", *p); //讀取 地址為0的int類型變量

    system("pause");
    printf("程序結(jié)束\n");
    return 0;
}

3.空指針的使用
1)指針初始化為空指針
例如: int p = 0;
建議這樣使用:
int
p = NULL;
目的就是,避免訪問非法數(shù)據(jù)。

2)指針不再使用時(shí),可以設(shè)置為空指針
int *my_girl = &xiao_long_lv;
my_girl = NULL;

1)表示這個(gè)指針還沒有具體的指向
int *p = NULL;
if (!p) {
......
}

5.指向結(jié)構(gòu)體的指針

#include <stdio.h>

struct friend {
    char name[32];
    char sex[3];
    int age; 
};

int main(void) {
    struct friend f1 = {
        "小龍女", "女", 18
    };

    //定義了一個(gè)指針變量p, 
    //這個(gè)my_girl可以指向一個(gè)struct friend類型的變量
    struct friend *my_girl;

    my_girl = &f1;

    //直接通過(guò)結(jié)構(gòu)體變量來(lái)訪問該結(jié)構(gòu)體內(nèi)部的成員
    printf("%s, %s, %d\n", f1.name, f1.sex, f1.age);

    //通過(guò)指針p來(lái)訪問結(jié)構(gòu)體內(nèi)部的成員
    //方式1, 很少使用該方式
    printf("%s, %s, %d\n", (*my_girl).name, (*my_girl).sex, (*my_girl).age);

    //方式2
    printf("%s, %s, %d\n", my_girl->name, my_girl->sex, my_girl->age);

    return 0;
}

6.字符的算術(shù)運(yùn)算

指針的自增運(yùn)算

#include <stdio.h>

int main(void) {
    int ages[] = {20,15,16,14,23,28,30,38, 35, 32, 26};
    int len = sizeof(ages) / sizeof(ages[0]);

    //先使用數(shù)組的方式來(lái)訪問
    for (int i=0; i<len ; i++) {
        printf("第%d個(gè)學(xué)員的年齡是:%d\n", i+1, ages[i]);
    }

    //使用指針來(lái)訪問
    //int *p = ages;  //指針p指向ages[0]
    int i = 0;
    for (int *p = ages; p < ages+len ; p++, i++) {
        printf("第%d個(gè)學(xué)員的年齡是:%d\n", i+1, *p); 
    }

    return 0;
}

指針的自減運(yùn)算

#include <stdio.h>
#include <string.h>

/**
 * 讓用戶輸入一個(gè)字符串,然后反向輸出(不能改變?cè)瓉?lái)的字符串!)
 *  "12345"  逆轉(zhuǎn)成   "54321"
 */

int main(void) {
    char line[128];
    int len;
    char tmp;

    printf("請(qǐng)輸入一個(gè)字符串: ");
    gets(line);

    len = strlen(line);
    //方法1 (改變了字符串本身)
    /*
    for (int i=0; i<len/2; i++) {
        tmp = line[i];
        line[i] = line[len-1-i];
        line[len-1-i] = tmp;
    }
    printf("逆轉(zhuǎn)以后:%s\n", line);
    */

    //方法2:不改變字符串
    /*
    for (int i=len-1; i>=0; i--) {
        printf("%c", line[i]);
    }
    */

    //用指針來(lái)重寫方法2
    char *p1 = line;
    char *p2 = p1 + len -1;
    for (char *p=p2; p>=p1; p--) {  //p--,就相當(dāng)于:  p=p-1
        printf("%c", *p);
    }

    return 0;
}

指針與整數(shù)之間的加減運(yùn)算

指針與指針之間的加減運(yùn)算

7.空指針

良好的編碼習(xí)慣:使用空指針

8.指向數(shù)組的指針

項(xiàng)目需求

使用指針進(jìn)一步優(yōu)化端口管理,使代碼更簡(jiǎn)明。

項(xiàng)目實(shí)現(xiàn)

項(xiàng)目練習(xí)

1.實(shí)現(xiàn)含有中文字符的字符串逆轉(zhuǎn)

void reverse(unsigned char *s) {
    int len = strlen(s);
    unsigned char tmp[len+1];

    unsigned char *p1 = s; 
    unsigned char *p2 = tmp + len;

    *p2-- = 0;
    while (*p1) {
        if (*p1 < 0xA0) { //ASCII字符,一般都是小于等于127的。
            *p2-- = *p1++;
        } else {
            *(p2-1) = *p1++;
            *p2 = *p1++;
            p2 -= 2;
        }
    }

    for (int i=0; i<len; i++) {
        s[i] = tmp[i];
    }
}
向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI