国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C/C++ - 深入理解char *a與char a[]的區別

深入理解char *a與char a[]的區別

2021-04-22 14:54jihite C/C++

很多人可能或多或少知道char *a與char a[]的一些區別,但如果詳細的說出來卻不知如何說去,下面這篇文章就給大家詳細介紹了關于C語言中char *a與char a[]的區別,有需要的朋友們可以參考借鑒,下面來一起學習學習吧。

前言

指針數組存在著一些本質的區別。當然,在某種情況下,比如數組作為函數的參數進行傳遞時,由于該數組自動退化為同類型的指針,所以在函數內部,作 為函數參數傳遞進來的指針與數組確實具有一定的一致性,但這只是一種比較特殊的情況而已,在本質上,兩者是有區別的。

下面來看看詳細的介紹。

char *a = "hello" 中的a是指向第一個字符‘a'的一個指針

char a[20] = "hello" 中數組名a也是執行數組第一個字符‘h'的指針

但二者并不相同:

看實例:把兩個字符串相加:

深入理解char *a與char a[]的區別

結果:

深入理解char *a與char a[]的區別

對比:

深入理解char *a與char a[]的區別

結果:

深入理解char *a與char a[]的區別

把字符串加到指針所指的字串上去,出現段錯誤,本質原因:*d="0123456789"存放在常量區,是無法修的。而數組是存放在棧中,是可以修改的。

兩者區別如下:

一. ”讀“ ”寫“ 能力

     char *a = "abcd";  此時"abcd"存放在常量區。通過指針只可以訪問字符串常量,而不可以改變它。

     而char a[20] = "abcd"; 此時 "abcd"存放在棧。可以通過指針去訪問和修改數組內容。

二. 賦值時刻

     char *a = "abcd"; 是在編譯時就確定了(因為為常量)。

     而char a[20] = "abcd"; 在運行時確定

三. 存取效率

     char *a = "abcd"; 存于靜態存儲區。在棧上的數組比指針所指向字符串快。因此慢

     而char a[20] = "abcd"; 存于棧上。快

另外注意:

     char a[] = "01234",雖然沒有指明字符串的長度,但是此時系統已經開好了,就是大小為6-----'0' '1' '2' '3' '4' '5' '\0',(注意strlen(a)是不計‘\0')

看一結構中出現的同樣的問題:

這樣紅色部分在調用Init函數時會出現“Segment Default", 因為此時 指針n是靜態的,只有“讀”的本事,不可以改變。

內存分配方式

內存分配有三種:靜態存儲區、堆區和棧區。他們的功能不同,對他們使用方式也就不同。

     1、靜態存儲區:內存在程序編譯的時候就已經分配好,這塊內存在程序的整個運行期間都存在。它主要存放靜態數據、全局數據和常量。

      2、棧區:在執行函數時,函數(包括main函數)內局部變量的存儲單元都可以在棧上創建,函數執行結束時這些存儲單元自動被釋放。棧內存分配運算內置于處理器的指令集中,效率很高,但是分配的內存容量有限。(任何變量都處于站區,例如int a[] = {1, 2},變量a處于棧區。數組的內容也存在于棧區。)

      3、堆區:亦稱動態內存分配。程序在運行的時候用malloc或new申請任意大小的內存,程序員自己負責在適當的時候用free或delete釋放內存。動態內存的生存期可以由我們決定,如果我們不釋放內存,程序將在最后才釋放掉動態內存。 但是,良好的編程習慣是:如果某動態內存不再使用,需要將其釋放掉,并立即將指針置位NULL,防止產生野指針。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

原文鏈接:http://www.cnblogs.com/kaituorensheng/archive/2012/10/23/2736069.html

延伸 · 閱讀

精彩推薦
  • C/C++c++ 單線程實現同時監聽多個端口

    c++ 單線程實現同時監聽多個端口

    這篇文章主要介紹了c++ 單線程實現同時監聽多個端口的方法,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下...

    源之緣11542021-10-27
  • C/C++深入理解goto語句的替代實現方式分析

    深入理解goto語句的替代實現方式分析

    本篇文章是對goto語句的替代實現方式進行了詳細的分析介紹,需要的朋友參考下...

    C語言教程網7342020-12-03
  • C/C++學習C++編程的必備軟件

    學習C++編程的必備軟件

    本文給大家分享的是作者在學習使用C++進行編程的時候所用到的一些常用的軟件,這里推薦給大家...

    謝恩銘10102021-05-08
  • C/C++C語言中炫酷的文件操作實例詳解

    C語言中炫酷的文件操作實例詳解

    內存中的數據都是暫時的,當程序結束時,它們都將丟失,為了永久性的保存大量的數據,C語言提供了對文件的操作,這篇文章主要給大家介紹了關于C語言中文件...

    針眼_6702022-01-24
  • C/C++C/C++經典實例之模擬計算器示例代碼

    C/C++經典實例之模擬計算器示例代碼

    最近在看到的一個需求,本以為比較簡單,但花了不少時間,所以下面這篇文章主要給大家介紹了關于C/C++經典實例之模擬計算器的相關資料,文中通過示...

    jia150610152021-06-07
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數使用

    詳解c語言中的 strcpy和strncpy字符串函數使用

    strcpy 和strcnpy函數是字符串復制函數。接下來通過本文給大家介紹c語言中的strcpy和strncpy字符串函數使用,感興趣的朋友跟隨小編要求看看吧...

    spring-go5642021-07-02
  • C/C++C語言實現電腦關機程序

    C語言實現電腦關機程序

    這篇文章主要為大家詳細介紹了C語言實現電腦關機程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    xiaocaidayong8482021-08-20
  • C/C++C++之重載 重定義與重寫用法詳解

    C++之重載 重定義與重寫用法詳解

    這篇文章主要介紹了C++之重載 重定義與重寫用法詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下...

    青山的青6062022-01-04
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 国产精品国色综合久久 | 国产资源在线视频 | 亚洲高清视频在线 | 亚洲精品天堂 | 在线精品日韩 | 欧美日韩成人一区二区 | 一区二区三区在线不卡 | 亚洲国产一区在线 | 国产成人精品综合 | 精品久久av| 亚洲日韩中文字幕一区 | 狠狠操电影 | 国产色视频在线播放 | 台湾av在线 | 久久久女女女女999久久 | 欧美日韩亚洲成人 | 成人午夜精品一区二区三区 | 黄色网页在线 | 爱干在线 | 欧美日韩一区二区三区在线观看 | 成人h免费观看视频 | h视频免费观看 | 黄色网址视频大全 | 亚洲在线视频 | 日本一区二区视频在线播放 | 黄色激情网站 | av免费网站| 色www精品视频在线观看 | 久久久免费视频观看 | 一级片导航 | 久久久久久国产一级毛片高清版 | 婷婷久久综合 | 懂色一区二区三区av片 | 日本精品在线 | 国产黄色在线网站 | 亚洲欧美在线观看 | 亚洲一区二区中文字幕 | 中文字幕视频在线 | 中文字幕一区二区三区乱码在线 | 国产精品美女久久久久aⅴ国产馆 | 午夜成人在线视频 |