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

C語言進階:指針的進階(1)

 更新時間:2021年09月02日 14:18:13   作者:AKA你的閨蜜  
這篇文章主要介紹了C語言指針詳解及用法示例,介紹了其相關(guān)概念,然后分享了幾種用法,具有一定參考價值。需要的朋友可以了解下

指針進階

我們在初階時就已經(jīng)接觸過指針,了解了指針的相關(guān)內(nèi)容,有:

指針定義:指針變量,用于存放地址。地址唯一對應(yīng)一塊內(nèi)存空間。

指針大小:固定32位平臺下占4個字節(jié),64位8個字節(jié)。

指針類型:類型決定指針±整數(shù)的步長及指針解引用時訪問的大小。

指針運算:指針解引用,指針±整數(shù),指針-指針,指針關(guān)系運算。

本章節(jié)在此基礎(chǔ)上,對C語言階段指針進行更深層次的研究。

字符指針

字符指針,存入字符的地址,類型為char *

字符指針的作用

1.指向單個字符變量

char ch = 'w';
const char* pch = &ch;

這種很容易理解,就是指針解引用訪問字符變量。

2.指向字符串首字符

char* pc = "hello";
printf("%s\n", pc);

這種是把字符串"hello"放進指針嘛?

其實不然,類似于數(shù)組名,該指針存的是常量字符串"hello"的首字符的地址。通過對指針解引用訪問首字符地址,從而找到整個字符串。

在這里插入圖片描述

char* pc = "hello";
printf("%c\n", *(pc + 1));//e
printf("%s\n", pc);//hello
printf("%s\n", pc + 1);//ello

字符串本質(zhì)上還是在空間上連續(xù)存放,所以指針±整數(shù)同樣有訪問的效果。由此也可以看出%s的用法,把地址給%s會將其后的內(nèi)容看作字符串并打印直到\0 。(所以我猜測%s的s是string的意思)

字符指針的特點

例題

char str1[] = "hello bit";
char str2[] = "hello bit";
char* str3 = "hello bit";
char* str4 = "hello bit";
if (str1 == str2)
    printf("str1 = str2\n");//1
else
    printf("str1 != str2\n");//2
if (str3 == str4)
    printf("str3 = str4\n");//3
else
    printf("str3 != str4\n");//4

str1(3)==str2(4),比較的是二者其實位置地址是否相同。(地址才是真正判斷二者是否相同的要素)

答案是2和3。因為1和2是用字符串初始化數(shù)組,3和4是指針指向常量字符串。

str1和str2是普通的數(shù)組,是在內(nèi)存上開辟了兩塊空間不過存放了一樣的數(shù)據(jù)。
str3和str4指向常量字符串,存放在內(nèi)存的常量區(qū),是不可被修改且具有唯一性即常量區(qū)只存放一個。所以str3和str4指向的都是同一個字符串。

在這里插入圖片描述

常量區(qū)的存儲特點:存放在常量區(qū)的數(shù)據(jù)不可被修改,正因為不可修改所以存一份就夠了。后期如果需要,使用的是同一數(shù)據(jù)。(數(shù)據(jù)還是同一個數(shù)據(jù),只是用不同的指針維護)

小結(jié)

1.常量字符串不可被修改,存放在內(nèi)存的常量區(qū)。

2.具有唯一性即常量區(qū)只存放一個。

指針數(shù)組

指針數(shù)組的定義

int arr[10];//整型數(shù)組
char ch[5];//字符數(shù)組
float f[20];//浮點型數(shù)組

可見,元素類型也就是數(shù)組的“類型”。

char* pch[5];
int* parr[10];
float* pf[20];

指針數(shù)組就是存放指針的數(shù)組。

int arr[10];
int* arr[10];

整型數(shù)組的數(shù)組名arr,即首元素地址,是一級指針。

指針數(shù)組的數(shù)組名parr,也是首元素地址,不過其首元素為int*類型變量,所以parr就是二級指針。

指針數(shù)組的使用

int arr1[] = { 1,2,3,4,5 };
int arr2[] = { 2,3,4,5,6 };
int arr3[] = { 3,4,5,6,7 };
int* parr[] = { arr1,arr2,arr3 };
for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 5; j++) {
        //1.
        printf("%d ", parr[i][j]);
        //2.
        printf("%d ", *(*(parr + i) + j));
    }
    printf("\n");
}

//答案
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
ps:
parr[i] <==> *(parr+i)
*(parr[i]+j) <==> *(*(parr+i)+j) <==> (*parr+i)[j] <==> parr[i][j]

通過指針數(shù)組訪問整型數(shù)組的每個元素。parr[i][j]和*(*(parr+i)+j)本質(zhì)上是等價的。

const char* pch[] = { "abcde", "bcdef", "cdefg" };
for (int i = 0; i < 3; i++) {
    //1.
    printf("%s", pch[i]);
    //2.
    printf("%s", *(pch + i));
    for (int j = 0; j < 5; j++) {
        //3.
        printf("%c", pch[i][j]);
        //4.
        printf("%c", *(*(pch + i) + j));
    }
    printf("\n");
}

打印字符串使用%s更簡單,若要使用%c,就是得到每個字符串的起始地址,分別向后訪問。

從這里也可以看出數(shù)組和指針的關(guān)系,我愿稱之為*和[]的愛恨情仇!

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • C++多態(tài)的示例詳解

    C++多態(tài)的示例詳解

    多態(tài)按字面的意思就是多種形態(tài)。當(dāng)類之間存在層次結(jié)構(gòu),并且類之間是通過繼承關(guān)聯(lián)時,就會用到多態(tài)。本文將通過三個小案例讓大家更深入的了解一下C++的多態(tài),感興趣的可以了解一下
    2022-06-06
  • vs2020打包生成exe的實現(xiàn)方法

    vs2020打包生成exe的實現(xiàn)方法

    本文主要介紹了Visual Studio Installer Projects插件和第三方軟件SetupFactory創(chuàng)建可安裝的Windows應(yīng)用程序包,并最終將其轉(zhuǎn)換為可執(zhí)行文件的方法,感興趣的可以了解一下
    2024-12-12
  • C++中NULL與nullptr的區(qū)別對比

    C++中NULL與nullptr的區(qū)別對比

    nullptr是c++11中的關(guān)鍵字,下面這篇文章主要介紹了C++中NULL與nullptr區(qū)別的相關(guān)資料,對大家來說還是挺實用的,需要的朋友可以參考下
    2021-05-05
  • 詳解C語言中二分查找的運用技巧

    詳解C語言中二分查找的運用技巧

    本文主要介紹了二分查找在實際中的應(yīng)用,通過分析幾個應(yīng)用二分查找的實例,總結(jié)下能使用二分查找算法的一些共同點,感興趣的可以了解一下
    2022-03-03
  • C語言數(shù)組元素的循環(huán)移位方法

    C語言數(shù)組元素的循環(huán)移位方法

    今天小編就為大家分享一篇C語言數(shù)組元素的循環(huán)移位方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • 深入解析C++和JAVA的字符串

    深入解析C++和JAVA的字符串

    這篇文章主要介紹了C++和JAVA的字符串,JAVA 中String 和StringBuffer的區(qū)別,需要的朋友可以參考下
    2015-07-07
  • QString的常用方法(小結(jié))

    QString的常用方法(小結(jié))

    這篇文章主要介紹了QString的常用方法(小結(jié)),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • 一文詳解Qt如何優(yōu)雅的進行界面布局

    一文詳解Qt如何優(yōu)雅的進行界面布局

    使? Qt 在界?上創(chuàng)建的控件, 都是通過 “絕對定位” 的?式來設(shè)定的,這種設(shè)定?式其實并不?便,尤其是界?如果內(nèi)容?較多, 不好計算,所以Qt 引??布局管理器 (Layout)?機制, 來解決上述問題,需要的朋友可以參考下
    2024-05-05
  • C++設(shè)計模式之單例模式詳解

    C++設(shè)計模式之單例模式詳解

    這篇文章主要介紹了C++設(shè)計模式之單例模式,本文同時給出了數(shù)種單例模式的實現(xiàn)代碼,需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-09-09
  • C++中友元的實例詳解

    C++中友元的實例詳解

    這篇文章主要介紹了C++中友元的實例詳解的相關(guān)資料,希望通過本文大家能掌握友元的使用方法,需要的朋友可以參考下
    2017-09-09

最新評論

东明县| 班玛县| 新郑市| 色达县| 奉节县| 沂南县| 鄂州市| 广宁县| 肇州县| 岑巩县| 宜兴市| 西畴县| 大同市| 庐江县| 西安市| 皮山县| 岳池县| 台南县| 濮阳市| 濮阳市| 北碚区| 九寨沟县| 东宁县| 渭源县| 驻马店市| 涪陵区| 宜昌市| 旺苍县| 沙坪坝区| 平南县| 河间市| 皋兰县| 保康县| 榆社县| 孝感市| 绥化市| 紫阳县| 南平市| 高雄市| 闵行区| 福泉市|