【C語言學(xué)習(xí)】char *str與char str[]的區(qū)別?

C語言中沒有特定的字符串類型,常用以下兩種方式定義字符串:一種是字符數(shù)組,另一種是指向字符串的指針。如下:

(1)char str[] = "happy";
(2)char *str = "happy";

這種方式有什么不同呢?

示例一:字符數(shù)組

#include <stdio.h>

int main(void)
{
    char str[20] = "hello";

    str[0] = 'H';
    printf("%s\n",str);

    return 0;
}

運(yùn)行結(jié)果:

Hello

示例二:指向字符串的指針

#include <stdio.h>

int main(void)
{
    char *str = "hello";

    str[0] = 'H';
    printf("%s\n",str);

    return 0;
}

運(yùn)行結(jié)果:

無打印信息輸出

可見,使用示例一方式定義的字符串其字符是可以修改的,使用示例二方式定義的字符串其字符是不可以修改的。示例二中可以成功編譯和鏈接,但運(yùn)行時(shí)可能會(huì)出現(xiàn)錯(cuò)誤,我編譯壞境是32bit的,運(yùn)行結(jié)果是無打印信息輸出,在其他不同的平臺(tái)運(yùn)行可能會(huì)出現(xiàn)段錯(cuò)誤(Segment Fault)或者寫入位置錯(cuò)誤。

這兩種表示字符串的方式的主要區(qū)別是:字符串指針指向的內(nèi)容是不可修改的,字符數(shù)組是可以修改的,即示例二方式定義的字符串保存在常量區(qū),是不可更改的,示例一方式定義的字符串保存在全局?jǐn)?shù)據(jù)區(qū)或棧區(qū),是可修改的。

內(nèi)存的分配方式:

內(nèi)存分配可分為三種:靜態(tài)存儲(chǔ)區(qū)、棧區(qū)、堆區(qū)。

1、靜態(tài)存儲(chǔ)區(qū):該內(nèi)存在程序編譯的時(shí)候就已經(jīng)分配好,這塊內(nèi)存在程序的整個(gè)運(yùn)行期間都存在,它主要存放靜態(tài)數(shù)據(jù)、全局?jǐn)?shù)據(jù)和常量。

2、棧區(qū):它的用途是完成函數(shù)的調(diào)用。在執(zhí)行函數(shù)時(shí),函數(shù)內(nèi)局部變量及函數(shù)參數(shù)的存儲(chǔ)單元在棧上創(chuàng)建,函數(shù)調(diào)用結(jié)束時(shí)這些存儲(chǔ)單元自動(dòng)被釋放。

3、堆區(qū):程序在運(yùn)行時(shí)使用庫函數(shù)為變量申請(qǐng)內(nèi)存,在變量使用結(jié)束后再調(diào)用庫函數(shù)釋放內(nèi)存。動(dòng)態(tài)內(nèi)存的生存期是由我們決定的,如果我們不釋放內(nèi)存,就會(huì)導(dǎo)致內(nèi)存泄漏。


關(guān)注我的公號(hào)【嵌入式大雜燴】,回復(fù):C語言,可獲取C語言資料。
關(guān)注我的個(gè)人博客:【我的博客】查看更多筆記

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,681評(píng)論 1 32
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對(duì)象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,690評(píng)論 0 4
  • 原文地址:C語言函數(shù)調(diào)用棧(一)C語言函數(shù)調(diào)用棧(二) 0 引言 程序的執(zhí)行過程可看作連續(xù)的函數(shù)調(diào)用。當(dāng)一個(gè)函數(shù)執(zhí)...
    小豬啊嗚閱讀 4,974評(píng)論 1 19
  • 一、溫故而知新 1. 內(nèi)存不夠怎么辦 內(nèi)存簡(jiǎn)單分配策略的問題地址空間不隔離內(nèi)存使用效率低程序運(yùn)行的地址不確定 關(guān)于...
    SeanCST閱讀 8,140評(píng)論 0 27
  • ??引用類型的值(對(duì)象)是引用類型的一個(gè)實(shí)例。 ??在 ECMAscript 中,引用類型是一種數(shù)據(jù)結(jié)構(gòu),用于將數(shù)...
    霜天曉閱讀 1,226評(píng)論 0 1

友情鏈接更多精彩內(nèi)容