最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言由淺入深理解指針

 更新時間:2022年05月09日 11:59:19   作者:龜π氣功  
C語言這門課程在計算機的基礎(chǔ)教學中一直占有比較重要的地位,然而要想突破C語言的學習,對指針的掌握是非常重要的,本文將具體針對指針的基礎(chǔ)做詳盡的介紹

1. 相關(guān)概念

  • 操作系統(tǒng)給每個存儲單元分配了一個編號,從ox00 00 00 00~0xff ff ff ff,這個編號稱為地址,指針就是地址
  • 指針變量:即這個變量用來存放一個地址編號
  • 無論什么類型的地址,都是存儲單元的變換,在32位平臺下都是4個字節(jié),即任何類型的指針變量都是4個字節(jié)大小,64位操作系統(tǒng)占8個字節(jié)。
  • 對應(yīng)類型的指針變量,只能存放對應(yīng)類型的地址。例如整型指針變量,只能存放整型變量的地址。
#include <stdio.h>
int main()
{
    char *a;
    short *b;
    int *c;
    long *d;
    float *e;
    double *f;
    printf("sizeof(a)=%d\n", sizeof(a));
    printf("sizeof(b)=%d\n", sizeof(b));
    printf("sizeof(c)=%d\n", sizeof(c));
    printf("sizeof(d)=%d\n", sizeof(d));
    printf("sizeof(e)=%d\n", sizeof(e));
    printf("sizeof(f)=%d\n", sizeof(f));
    return 0;
}

可見,我的操作系統(tǒng)是64位的。

為什么在64位系統(tǒng)中指針的大小是8,而32位的卻是4? 

64位系統(tǒng),這個位數(shù)指的是CPU 里面的通用寄存器的數(shù)據(jù)寬度為64位,也就是說一個地址占二進制位數(shù)是64,所以:

sizeof(double *)==sizeof(int *)==sizeof(char *)==64/8==8

32位系統(tǒng),同理,他的一個地址占32位二進制空間,sizeof(double *)==sizeof(int *)==sizeof(char *)==32/8==4

其實明白了兩個系統(tǒng)的尋址原理就能明白,大體就是這個原因。地址跟系統(tǒng)有關(guān),但是基本數(shù)據(jù)類型占的大小是由C語言本身決定。

2. 指針的定義方法

數(shù)據(jù)類型 *指針變量名

int p; // 定義了一個指針變量p 在定義指針變量的時候, 是用來修飾變量的,代表指針變量。

關(guān)于指針的運算符:

& 取地址 * 取值

#include <stdio.h>
int main()
{
    int a = 100;
    int *p; // 定義一個指針變量
    p = &a; // 給指針變量賦值
    printf("a = %d, %d\n", a, *p);  // *p 等價于變量 a
    return 0;
}

拓展:如果一行中定義多個指針變量,每個變量前面都要加*修飾

3. 指針的分類

  1. 字符指針
  2. 短整型指針
  3. 整型指針
  4. 長整型指針
  5. float型指針
  6. double型指針
  7. 函數(shù)指針
  8. 結(jié)構(gòu)體指針
  9. 指針的指針
  10. 數(shù)組的指針

4. 指針和變量的關(guān)系

引用變量的方法:

1.直接通過變量的名稱

2.通過*指針名稱 引用

#include <stdio.h>
int main()
{
    int *p1, *p2, temp, a, b;
    p1 = &a;
    p2 = &b;
    printf("請輸入a,b的值:\n");
    scanf("%d %d", p1, p2); // 和之前的scanf不同,這里直接用p1p2作為寫入地址。
    temp = *p1;  // 用p1指向的變量a給temp賦值
    *p1 = *p2; // 用p2指向的變量b給p1指向的變量a賦值
    *p2 = temp;  // temp給p2指向的變量b賦值
    printf("a=%d b=%d\n", a, b);
    printf("*p1=%d,*p2=%d\n", *p1, *p2);
    return 0;
}

如果想讓不同類型的指針相互賦值的時候,需要強制類型轉(zhuǎn)換:

#include <stdio.h>
int main()
{
    int a = 0x1234, b = 0x5678;  // 4個字節(jié)
    char *p1, *p2;  // char類型只能保存一個字節(jié)
    printf("%#x  %#x\n", a, b);
    p1 = (char *)&a;  // 強制類型轉(zhuǎn)換
    p2 = (char *)&b;
    printf("%#x  %#x\n", *p1, *p2);
    p1++;  // 指針向上移動
    p2++;
    printf("%#x  %#x\n", *p1, *p2);
    return 0;
}

5. 指針與數(shù)組的關(guān)系

指針保存的是數(shù)組第一個元素的地址

也可以通過*(p+2)=100給當前地址的下一個變量賦值

#include<stdio.h>
int main(){
    int a[5] = {0,1,2,3,4};
    int *p;
    p = a;
    // 指針指向數(shù)組a的第一個元素的首地址
    printf("a[2]=%d\n",a[2]);
    printf("p[2]=%d\n",p[2]);
    // *(a+n) <==> *(p+n) <==> a[n] <==> p[n]
    printf("*(p+2)%d\n",*(p+2));
    printf("*(a+2)%d\n",*(a+2));
    printf("p=%p\n",p);
    printf("p+2=%p\n",p+2);
    return 0;
}

6. 指針的運算

指針可以加一個整數(shù),往下指幾個它指向的變量,結(jié)果還是地址

#include <stdio.h>
void test1()
{
    int a[10];
    int *p, *q;
    p = a;
    q = p + 2;  // p q 間隔8個字節(jié),意味著加一個整數(shù)最終移動的字節(jié)數(shù)與指針變量的類型也有關(guān)系
    printf("p=%p\n", p);
    printf("q=%p\n", q);
    return;
}
int main()
{
    test1();
    return 0;
}

  • 兩個相同的指針可以比較大小

前提:指向同一個數(shù)組的元素

#include <stdio.h>
void test2()
{
    int a[10];
    int *p, *q;
    p = &a[1];
    q = &a[6];
    if (p < q)
    {
        printf("p < q\n");
    }
    else if (p > q)
    {
        printf("p > q\n");
    }
    else
    {
        printf("p = q\n");
    }
    return;
}
int main()
{
    //  test1();
    test2();
    return 0;
}

  • 兩個同類型的指針可以做減法

前提:指向同一個數(shù)組元素,減法的結(jié)果是指針指向的中間有多少個元素

#include <stdio.h>
void test3()
{
    int a[10];
    int *p, *q;
    p = &a[0];
    q = &a[3];
    printf("%ld\n", q - p);
    return ;
}
int main()
{
    //  test1();
    //  test2();
    test3();
    return 0;
}

  • 兩個相同類型的指針可以相互賦值
#include <stdio.h>
void test4()
{
    int a = 100;
    int *p, *q;
    p = &a;
    printf("a=%d %d\n", a, *p);
    q = p;
    printf("*q=%d\n", *q);
    *q = 999;
    printf("a=%d\n", a);
}
int main()
{
    //  test1();
    //  test2();
    //  test3();
    test4();
    return 0;
}

到此這篇關(guān)于C語言由淺入深理解指針的文章就介紹到這了,更多相關(guān)C語言指針內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言之實現(xiàn)棧的基礎(chǔ)創(chuàng)建

    C語言之實現(xiàn)棧的基礎(chǔ)創(chuàng)建

    這篇文章主要介紹了C語言之實現(xiàn)棧的基礎(chǔ)創(chuàng)建,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C語言如何利用異或進行兩個值的交換詳解

    C語言如何利用異或進行兩個值的交換詳解

    最近在工作中遇到了兩個值交換的需求,發(fā)現(xiàn)自己對異或有些忘記,所以索性寫出來,方便以后需要的時候參考學習,下面這篇文章主要給大家介紹了關(guān)于C語言如何利用異或進行兩個值的交換的相關(guān)資料,需要的朋友可以參考下。
    2017-09-09
  • C++深入講解new與deleted關(guān)鍵字的使用

    C++深入講解new與deleted關(guān)鍵字的使用

    這篇文章主要介紹了C++中new與deleted關(guān)鍵字的使用,new在動態(tài)內(nèi)存中為對象分配空間并返回一個指向該對象的指針;delete接受一個動態(tài)對象的指針, 銷毀該對象, 并釋放與之關(guān)聯(lián)的內(nèi)存
    2022-05-05
  • C語言實現(xiàn)簡單航班管理系統(tǒng)

    C語言實現(xiàn)簡單航班管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)簡單航班管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • C++關(guān)于const與引用的分析講解

    C++關(guān)于const與引用的分析講解

    Const?是C++中常用的類型修飾符,常類型是指使用類型修飾符const說明的類型,常類型的變量或?qū)ο蟮闹凳遣荒鼙桓碌?,引用變量是一個別名,也就是說,它是某個已存在變量的另一個名字。一旦把引用初始化為某個變量,就可以使用該引用名稱或變量名稱來指向變量
    2022-04-04
  • C++如何用數(shù)組模擬鏈表

    C++如何用數(shù)組模擬鏈表

    大家好,本篇文章主要講的是C++如何用數(shù)組模擬鏈表,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • C++實現(xiàn)學生住宿管理系統(tǒng)

    C++實現(xiàn)學生住宿管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C++實現(xiàn)學生住宿管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C語言 哈希查找詳解(哈希表的創(chuàng)建、處理沖突、查找等)

    C語言 哈希查找詳解(哈希表的創(chuàng)建、處理沖突、查找等)

    哈希表是一種非常重要的數(shù)據(jù)結(jié)構(gòu),并在大量的計算機科學和工程應(yīng)用中發(fā)揮重要作用,了解哈希表的原理和實現(xiàn)方式,將有助于我們更好地理解這個數(shù)據(jù)結(jié)構(gòu)及如何應(yīng)用它來解決實際問題,這篇文章主要介紹了C語言 哈希查找(哈希表的創(chuàng)建、處理沖突、查找等),需要的朋友可以參考下
    2024-01-01
  • C++智能指針shared_ptr分析

    C++智能指針shared_ptr分析

    這篇文章主要介紹了C++智能指針shared_ptr分析的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • C語言中不定參數(shù)?...?的語法以及函數(shù)封裝

    C語言中不定參數(shù)?...?的語法以及函數(shù)封裝

    不定參數(shù)是指函數(shù)可以接收不確定個數(shù)的參數(shù),下面這篇文章主要給大家介紹了關(guān)于C語言中不定參數(shù)?...?的語法以及函數(shù)封裝的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-01-01

最新評論

曲沃县| 广丰县| 北辰区| 类乌齐县| 诸暨市| 宁都县| 沾化县| 宜良县| 合阳县| 汉阴县| 临沧市| 平湖市| 广西| 齐齐哈尔市| 东山县| 敦化市| 鹤山市| 松江区| 怀宁县| 双鸭山市| 郧西县| 榆社县| 纳雍县| 金门县| 仪陇县| 乐安县| 吕梁市| 镇平县| 繁峙县| 湘潭县| 肥乡县| 博兴县| 万宁市| 巴里| 延安市| 化德县| 多伦县| 深圳市| 贵州省| 彰化市| 星座|