精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

C語言中的char數組和char指針有什么區別?

玩轉單片機與嵌入式 ? 來源:玩轉單片機與嵌入式 ? 2023-01-29 16:35 ? 次閱讀

讓我們通過下面的例子,來了解 C語言中字符數組和字符指針之間的區別。

void test()
{
    //arr is array of characters
    char arr[12] = "Aticleworld";

    //ptr is pointer to char
    char *ptr = "Aticleworld";
}
現在,讓我們比較arr(字符數組)和ptr(字符指針)。

區別1: 字符串文本是用雙引號括起來的零個或多個多字節字符的序列。當你編寫語句 char arr[12] = "Aticleworld"時,字符串文本中的字符被復制到 arr. 當您編寫語句 char *ptr = "Aticleworld"時,您是讓字符串文本數組進行數組到指針的轉換,以獲取指向其第一個元素的指針。指針 ptr 指向字符串文本數組的第一個元素 ('A').

6aed65a2-9a66-11ed-bfe3-dac502259ad0.png

區別2: arr 是存儲在連續內存位置的字符集合,而 ptr 保存字符的地址。

arr 包含 12 個元素,每個元素位于連續的內存位置。另一方面,ptr 保存字符串文本的第一個字符的地址。

區別3:當我們在 char 數組 arr 上使用 sizeof 運算符時,它給出字符總數,而 char 指針 ptr 只給出指針的大小。如下:

#include 
int main()
{
    //arr is array of characters
    char arr[] = "Aticleworld";
    //ptr is pointer to char
    char *ptr = "Aticleworld";
    printf("Size of arr %ld
", sizeof(arr));
    // sizeof a pointer is printed which is same for all type
    // of pointers (char *, void *, etc)
    printf("Size of ptr %ld", sizeof(ptr));
    return 0;
}

輸出

Size of arr 24
Size of ptr 4
區別4: 和指針之間的另一個重要區別是,我們可以增加指針,但不能創建數組的增量。例
arr++ =>非法語句。
ptr++==>正常語句。
區別5:我們可以將值重新分配給數組,但字符串文本不可修改。如果程序嘗試修改由字符串文本形成的靜態數組,則行為未定義。例

//arr is array of characters
char arr[] = "Aticleworld";
gets(arr); 
fgets(arr,sizeof(arr),stdin); //有效表達式
scanf("%s", arr); //有效表達式
strcpy(arr, "aticle"); //有效表達式
arr[0] = 'a'; //有效表達式
arr[10] = 'M'; //有效表達式
arr[11] = 'M'; //有效表達式

char *ptr = "Aticleworld";


ptr[0]='P';//無效表達式


*ptr='W';//無效表達式
無別6: 未初始化的指針也可能導致未定義的行為。請參閱以下示例。
char *ptr;
ptr[0] = 'A'; //未定義的行為
gets(ptr); //未定義的行為
scanf(“%s”, ptr); //未定義的行為
strcpy(ptr, “source”); //未定義的行為
strcat(ptr, “second string”); //未定義的行為
區別7: Char數組本質上是靜態的,這意味著您無法調整數組的大小,而使用指針,您可以在任何時間點更改分配的內存的大小。

區別8:數組完全由程序控制。它將正確分配所需的內存,并在超出范圍時自動釋放內存。但是,如果分配動態內存,則char指針的情況有所不同,您必須手動取消分配它,否則會引入內存泄漏。例

void foo1()
{
    //arr是字符數組
    char arr[12] = "Aticleworld";
}




//Issue memory leak
void foo2()
{
    char *ptr = (char*)malloc(12);

//忘記釋放內存
}

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • C語言
    +關注

    關注

    180

    文章

    7601

    瀏覽量

    136251
  • 字符
    +關注

    關注

    0

    文章

    232

    瀏覽量

    25176
  • 指針
    +關注

    關注

    1

    文章

    480

    瀏覽量

    70512
  • 數組
    +關注

    關注

    1

    文章

    416

    瀏覽量

    25913
  • char
    +關注

    關注

    0

    文章

    11

    瀏覽量

    3707

原文標題:【軟件】C語言中的char數組和char指針有什么區別?

文章出處:【微信號:玩轉單片機與嵌入式,微信公眾號:玩轉單片機與嵌入式】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    C語言數組指針區別

    大家好,我是嵌入式老林,從事嵌入式軟件開發多年,今天分享的內容是C語言數組指針區別,希望能對你有所幫助。
    發表于 07-11 12:40 ?366次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b><b class='flag-5'>數組</b>和<b class='flag-5'>指針</b>的<b class='flag-5'>區別</b>

    C語言中指針數組數組指針區別

    指針數組之間存在著緊密的關系。在本文中,我們將探討指針數組的關系、指針算術和數組遍歷、多維
    發表于 08-17 15:29 ?397次閱讀

    指針數組數組指針什么區別和聯系呢

    什么是指針數組數組指針指針數組數組
    發表于 12-24 06:55

    C語言中指針數組分別有哪些作用呢

    C語言中指針數組分別有哪些作用呢?
    發表于 02-25 07:20

    C語言入門教程-用指針操作數組

    C語言入門教程 在C語言中數組指針的關系十分密切。要想有效地使用
    發表于 07-29 12:18 ?1484次閱讀

    char *和char數組區別及內核訪問用戶區

    的也就是兩個指針了,而對于char數組 pa2,它的內存表示就是s1的15個字節而s2的15個字節連續排放,整個結構就是實實在在的數據,我們傳入send就將s1和s2的內容一塊傳送出去 了,而不僅僅
    發表于 04-02 14:36 ?3148次閱讀

    指針數組都是C語言的精髓所在 兩者何聯系區別

    指針數組都是C語言的精髓所在,對于很多C程序員來說,如果你問這樣一個問題:數組
    的頭像 發表于 05-27 14:51 ?4077次閱讀
    <b class='flag-5'>指針</b>和<b class='flag-5'>數組</b>都是<b class='flag-5'>C</b><b class='flag-5'>語言</b>的精髓所在 兩者<b class='flag-5'>有</b>何聯系<b class='flag-5'>區別</b>

    C語言函數中的傳值和傳指針到底什么區別

    我們可能聽過C語言中的傳值和傳指針,在其他語言中,也有傳引用一說,那么他們到底什么區別呢?如果
    的頭像 發表于 09-08 10:14 ?5038次閱讀

    C語言函數參數關于傳值和傳指針什么區別

    C語言函數參數的傳值和傳指針什么區別
    的頭像 發表于 02-26 16:35 ?2188次閱讀

    為什么C語言函數不能返回數組

    C語言函數可以返回指針、結構體,為什么不能返回數組? 下面一步一步來分析: 1 函數不能返回數組C
    的頭像 發表于 03-29 11:18 ?1983次閱讀

    MCU_C語言中 數組指針 的應用 -- char (*stringp)[]

    定義一個指向數組指針stringpchar (*stringp)[];取得某個數組的地址 :char *dst = &string[10];
    發表于 11-29 18:06 ?2次下載
    MCU_<b class='flag-5'>C</b><b class='flag-5'>語言中</b> <b class='flag-5'>數組</b>型<b class='flag-5'>指針</b> 的應用 -- <b class='flag-5'>char</b> (*stringp)[]

    C語言中指針(重點)超詳細

    C語言中指針1、指針是什么2、指針指針類型2.1、指針
    發表于 01-13 14:10 ?11次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言中</b>的<b class='flag-5'>指針</b>(重點)超詳細

    C語言指針數組區別

    C語言教程中我們使用通過數組名通過偏移和指針偏移都可以遍歷數組,那么指針
    的頭像 發表于 07-18 16:29 ?1904次閱讀

    C語言中什么是指針數組

    C語言中一個數組,若其元素均為指針類型數據,稱為指針數組,也就是說,
    的頭像 發表于 03-10 15:26 ?1676次閱讀

    Char數組與String是如何從統一走向分離的?

    在很多編程語言中,經常用 String 類型來表示字符串,用 Char 來表示字符類型;
    發表于 05-19 09:49 ?210次閱讀
    <b class='flag-5'>Char</b><b class='flag-5'>數組</b>與String是如何從統一走向分離的?