學(xué)習(xí)筆記3(指針運算,函數(shù)參數(shù)與指針赁遗,數(shù)組指針署辉,二級指針)

一、指針運算

//*p 代表的是它所指向的地制上面的值的運算
//p++ 是p 指針變量++岩四,結(jié)果就是:p指向它的下一個地址

int main(){
    int a = 10;
    int *p = &a; //申明一個int類型的指針變量 p //&a取變量a的地址

    *p = *p + 10;  //p指向的是a在內(nèi)存的地址,*p是取地址上的值, a = a + 10 a = 20哭尝;
    printf("p:%d, a:%d\n",p,a);
    int y = 1 + *p;  //  p指向的是a在內(nèi)存的地址,*p是取地址上的值 y = 1+a = 21
    printf("y:%d \n", y);

    *p += 1; //將地制所指向的值+1 再付給自己  相當(dāng)于 現(xiàn)在 a+=1   a = 21; 
    printf("p:%d, a:%d\n", p, a);

    (*p)++; //將*p所指向的值 a++ ; a = 22 
    printf("p:%d, a: %d , p address: %#x \n",*p,a,p);

    //將p的地址位移 根據(jù)運算符的優(yōu)先級 先進(jìn)行 ++ 運算 再進(jìn)行 *p運算(不要輕易的執(zhí)行這樣的運算剖煌,因為你得出的這一個新地址不知道是誰在使用)
    //p是int類型指針變量,*p++ = *(p++) ,p存儲的是a的內(nèi)存地址,p++是地址做偏移,然后*p再取了一個新的地址上面的值.
*p++;
    printf("p:%d, a: %d , p address: %#x \n", *p, a, p);

    system("pause");
    return 0;
}

二材鹦、數(shù)組與指針

//例`:
int main(){
    int a[5];
    int *p = a;//數(shù)組名a,就是數(shù)組的首地址 所以可以直接賦值
    int i;
    printf("%#x\n",a);

    //a+5,表示a 移動到數(shù)組的第5個位置 按照地址移到五個地址的長度
    //p++ 指針位移
    for (i = 0; p < a + 5;p++){
        *p = i; //給指針?biāo)傅闹蒂x值耕姊,相當(dāng)于給數(shù)組a 賦值
        i++;
    }
    system("pause");
    return 0;
}

//例2:
int main(){
    
    int a[5] = {1,2,3,4,5};
    int *p = a;//數(shù)組名a桶唐,就是數(shù)組的首地址 所以可以直接賦值
    int i;
    printf("%#x\n",a);

    p = p + 1; // 等價于 p++
    printf("p:%d\n",*p);

    //以下幾個操作是相等的
    //a[i] == *(p + i)
    //&a[i] == a + i;
    //p + i == &a[i] ==a+i

    system("pause");
    return 0;
}

三、指針和函數(shù)參數(shù)

java中:

int a = 10;
int b = a;//是將a對象所指向的引用的賦給b,所以b = 10;

C/C++中:

void swap(int c,int d){
     int temp;
    temp = c;
    c = d;
    d = temp;
}

int main() {
    int a = 10;
    int b = 5;
    swap(a,b);

    //因為C/C++中,相當(dāng)于將a和b的值一份給函數(shù)swap()的參數(shù)c和d,c和d也會有一個新的內(nèi)存地址,但是a和b的內(nèi)存地址還是不會變的,他們的值也不變
    printf(" a = %d,b = %d\n" , a, b); //a = 10 ,b = 5,
}
//實際上方法參數(shù)傳遞的時候是將a的值賦給d  將b 的值賦給e
//d跟e進(jìn)行了交換  對a跟b完成沒有關(guān)系
void swap(int d,int e){
    printf("d address :%#x ,e address:%#x \n", &d, &e);
    int temp;
    temp = d;
    d = e;
    e = temp;
}

//行參的修改不能帶來這個實參的修改
//將a b 的地址copy給了 形參 茉兰,然后尤泽,將這份copy的地址進(jìn)行了切換,而地址所指向的值是沒有變的
void swap2(int *a, int *b){
    printf("a address :%#x ,b address:%#x \n", a, b);
    int *temp;
    temp = a; //a的 地址給了temp
    a = b;  //a 地址變成了b的地址
    b = temp; //將b的地址變成了a的地址
    printf("a address :%#x ,b address:%#x \n", a, b);
}


void swap3(int *a, int *b){
    int temp;
    temp = *a; //將地址對應(yīng)的值取出來 賦給temp
    *a = *b;   //將b地址所在的值 賦給了a地址所在的值
    *b = temp; //將temp里面的值 賦給 b地址所在的值
}

int main(){
    int a, b;
    a = 10;
    b = 5;
    printf("a address :%#x ,b address:%#x \n", &a, &b);
    //這樣的方式只是將a跟b的值賦給了swap方法的參數(shù)不能將a和b的值進(jìn)行交換
    swap(a, b);  
    printf("a=%d,b=%d\n",a,b);

    //swap2方法中的a 存的是一個地址的副本 達(dá)不到修改的值效果
    swap2(&a, &b);
    printf("a=%d,b=%d\n", a, b);

    //此方法完成了a b 的交換
    swap3(&a, &b);
    printf("a=%d,b=%d\n", a, b);

    system("pause");
    return 0;
}

四规脸、指針數(shù)組

#include "string.h" 
void sort(char *name[],int n);

int main(){
    //指針數(shù)組 :是一個數(shù)組坯约,數(shù)組里面存放的是指針類型的變量
    char *name[] = {"hello","hubin","axoo","world"};
    int i, n = 4;

    //給字符串排序
    sort(name, n);
    for (i = 0; i < n; i++){
        printf("%s\n", name[i]);
    }

    //數(shù)組指針:是一個指針,這個指針指向的是一個數(shù)組的首地址
    //p2是一個指針變量名
    //p2指向的是一個數(shù)組莫鸭,一個有5個元素的數(shù)組
    char(*p2)[5];  //定義了一個數(shù)組指針

    system("pause");
    return 0;
}

//冒泡排序
//參數(shù)闹丐,是char類型的指針數(shù)組
//name[i] 是一個指針
void sort(char *name[], int n){ 
    char *temp;
    int i, j;
    for (i = 0; i < n; i++){
        for (j = 0; j< n - 1 - i; j++){
            if (strcmp(name[j],name[j+1])>0){ //根據(jù)字母進(jìn)行比較 相等返回 0  
                temp = name[j]; //將指針進(jìn)行了切換
                name[j] = name[j + 1];
                name[j + 1] = temp;
            }

        }
    }
}

五、 二級指針

int main(){
    int a = 100;
    int *p;
    p = &a;

    int **p2;
    p2 = &p;

    //二級指針 被因,存的內(nèi)容是一個一級指針的地址
    //p的值就是p這個變量卿拴,這個變量保存的是a的地址
    //*p 運算,得到的就是a的值
    //*p2 運算梨与,得到的就是p的值
    //**p2 運算堕花,得到的就是p的值的 *運算得到的值 a;
    return 0;
}

六蛋欣、知識要點

1航徙、C語言中的函數(shù)如何調(diào)用?
1)先申明函數(shù)才能調(diào)用
int function(){
    return 0陷虎;
}

int main(){
    function()
    return 0到踏;
}

2)如果函數(shù)體再后面也要先申明才可調(diào)用

int function();

int main(){
    function()
    return 0;
}

int function(){
    return 0尚猿;
}

2窝稿、頭文件的引入和定義

系統(tǒng)定義的頭文件是使用<> 引入 如:#include <stdlib.h>
自定義的頭文件是使用 "" 引入 如: #include "hubin.h"
1)創(chuàng)建源文件 hubin.c 里面定義一個fun函數(shù)
     #include "hubin.h"
        void int fun(int a ){
            return a++;
        }
2)創(chuàng)建頭文件 hubin.h 定義方法函數(shù)
void ing fun(int a);
3)引入自定義的頭文件調(diào)用fun()函數(shù)
#include "hubin.h"

int main(){
    
    int a = 0;
    fun(a);

    return 0;
}

3凿掂、運算符的優(yōu)先級

4伴榔、p 和 *p 有什么區(qū)別

int main(){
    int *p;
    //p是一個指針變量名
    //*p 是從p指針變量里面取出一個int 型數(shù)據(jù)
}

5纹蝴、為什么會有 int *p 和 char *cp 的類型定義

指針變量都是用于存地址的,而地址都是用4個字節(jié)的數(shù)字表示的踪少,
所以指針變量都是占用4個字節(jié)

p++ cp++ 的運算會隨著指針的類型位移的距離不同 
p++位移4個字節(jié)  
cp++ 位移一個字節(jié) 
正是因為有這樣的區(qū)別 所以我們指針要有類型的卻別定義
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末塘安,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子援奢,更是在濱河造成了極大的恐慌兼犯,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件集漾,死亡現(xiàn)場離奇詭異切黔,居然都是意外死亡,警方通過查閱死者的電腦和手機具篇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進(jìn)店門纬霞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人驱显,你說我怎么就攤上這事诗芜。” “怎么了秒紧?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵绢陌,是天一觀的道長挨下。 經(jīng)常有香客問我熔恢,道長,這世上最難降的妖魔是什么臭笆? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任叙淌,我火速辦了婚禮,結(jié)果婚禮上愁铺,老公的妹妹穿的比我還像新娘鹰霍。我一直安慰自己,他們只是感情好茵乱,可當(dāng)我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布茂洒。 她就那樣靜靜地躺著,像睡著了一般瓶竭。 火紅的嫁衣襯著肌膚如雪督勺。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天斤贰,我揣著相機與錄音智哀,去河邊找鬼。 笑死荧恍,一個胖子當(dāng)著我的面吹牛瓷叫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼摹菠,長吁一口氣:“原來是場噩夢啊……” “哼盒卸!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起次氨,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤世落,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后糟需,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體屉佳,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年洲押,在試婚紗的時候發(fā)現(xiàn)自己被綠了武花。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡杈帐,死狀恐怖体箕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情挑童,我是刑警寧澤累铅,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站站叼,受9級特大地震影響娃兽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜尽楔,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一投储、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧阔馋,春花似錦玛荞、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至下梢,卻和暖如春客蹋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背怔球。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工嚼酝, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人竟坛。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓闽巩,卻偏偏與公主長得像钧舌,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子涎跨,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內(nèi)容