大家好,關于c語言數組賦值為0很多朋友都還不太明白,不過沒關系,因為今天小編就來為大家分享關于用指針實現數組的輸入輸出的知識點,相信應該可以解決大家的一些困惑和問題,如果碰巧可以解決您的問題,還望關注下本站哦,希望對各位有所幫助!
C語言如何定義0數組
有默認是0的。
數組是一種線性表數據結構。它用一組連續的內存空間,來存儲一組具有相同類型的數據。線性表就是數據排成像一條線一樣的結構。每個線性表上的數據最多只有前和后兩個方向。其實除了數組,鏈表、隊列、棧等也是線性表結構。
而與它相對立的概念是非線性表,比如二叉樹、堆、圖等。之所以叫非線性,是因為在非線性表中,數據之間并不是簡單的前后關系。
第二個是連續的內存空間和相同類型的數據。正是因為這兩個限制,它才有了一個堪稱“殺手锏”的特性:“隨機訪問”。但有利就有弊,這兩個限制也讓數組的很多操作變得非常低效,比如要想在數組中刪除、插入一個數據,為了保證連續性,就需要做大量的數據搬移工作。
擴展資料
1、字符數組的初始化,最容易理解的方式就是逐個字符賦給數組中各元素。即把10個字符分別賦給str[0]到str[9]10個元素。
2、如花括號中提供的字符個數大于數組長度,則按語法錯誤處理;若小于數組長度,則只將這些字符數組中前面那些元素,其余的元素自動定為空字符。
c語言數組有0元素嗎
默認是0的。
數組是一種線性表數據結構。它用一組連續的內存空間,來存儲一組具有相同類型的數據。線性表就是數據排成像一條線一樣的結構。每個線性表上的數據最多只有前和后兩個方向。其實除了數組,鏈表、隊列、棧等也是線性表結構。
而與它相對立的概念是非線性表,比如二叉樹、堆、圖等。之所以叫非線性,是因為在非線性表中,數據之間并不是簡單的前后關系。
第二個是連續的內存空間和相同類型的數據。正是因為這兩個限制,它才有了一個堪稱“殺手锏”的特性:“隨機訪問”。但有利就有弊,這兩個限制也讓數組的很多操作變得非常低效,比如要想在數組中刪除、插入一個數據,為了保證連續性,就需要做大量的數據搬移工作。
c語言數組怎樣自動賦值
給數組賦值的方法除了用賦值語句對數組元素逐個賦值外,還可采用初始化賦值和動態賦值的方法。 C語言對數組的初始化賦值還有以下幾點規定: 1)可以只給部分元素賦初值。 當{}中值的個數少于元素個數時,只給前面部分元素賦值。 例如: inta[10]={0,1,2,3,4}; 表示只給a[0]~a[4]5個元素賦值,而后5個元素自動賦0值。 2)只能給元素逐個賦值,不能給數組整體賦值。 例如給十個元素全部賦1值,只能寫為: inta[10]={1,1,1,1,1,1,1,1,1,1}; 而不能寫為: inta[10]=1; 多維數組也是一樣 給數組賦值的方法除了用初始化賦值外,用賦值語句對數組元素只能逐個賦值
c語言怎么數組元素都為零
如果在定義數組時沒有給數組元素賦初值,那么這個數組的元素默認都為零。這是因為在C語言中,未初始化的全局變量和靜態變量默認會被初始化為0,而局部變量和動態分配的內存則不會被自動初始化,其值是未知的。因此,如果想要數組元素都為零,可以在定義數組時不給數組元素賦初值,或者可以使用循環來遍歷數組并將每個元素賦值為零。同時,如果想要數組元素的初始值為其他值,可以在定義數組時給數組元素賦初值。
c語言中怎么給一個行和列都是100的二維數組都賦0值
有兩種方法可以做到。
一、循環賦值。對每一項分別賦值為0。對于二維數組一般用雙重循環,實際上用單重循環也可以,效率上并無區別。參考代碼:在C庫函數中,有memset這一個函數,形式為/*SetNbytesofStoC.*/void*memset(void*s,intc,size_tn);功能為,在地址s指向的內存單元開始,將c個字節的空間,每個都賦值為c。這個函數是按字節賦值的,所以對于賦值0值,可以直接將整個內存空間清零。參考代碼:
第一種方法更具通用性,后一種方法不是永遠適合,但在可以用memset的情況下,后一種方法更高效。
c語言如何將已賦值的字符串初始化為空
修改:原來有“p=name[i]其實和p=name+i沒有任何區別”一句,是不對的,name[i]是數組,其中name可以作為只讀指針來看待,那么應該是*p=*(name+i)。name[i]相當于對指針這問題提的真好,理解這個問題了以后,對C語言指針的概念也就掌握了,而C語言最重要的就是指針。題主這重點抓的真到位,可謂綱舉目張,擒賊擒王。p是一個變量,那么想怎么給它賦值,就可以怎么給它賦值,但是C語言是強類型語言,如果賦值類型不匹配就會報錯,如果賦值類型雖然不匹配但是可以默認轉換,那么編譯可以通過但是會給警告。比如可以這樣做:p=0;p=1;都沒問題,因為p是一個指針,數字類型可以賦值給指針,但是給它賦值是什么含義?含義不對,即使編譯通過,運行也會報錯的。在第一個文件里存在一個錯誤是i沒有初始化,必須初始化為0或者1或者什么數字,不然一定會出錯,下面的討論假設初始化為1:在第一個文件里面,p是一個變量,這個變量的類型是指針,這個指針所指向的是“字符串指針”。那么既然是變量,就可以讀和寫,所以可以賦值;由于是強類型,所以只要是指針類型或者能轉換成指針類型的就可以賦值;由于它是一個指向”字符串指針“的指針,所以給它賦值的時候,如果所賦值對象類型不是指向”字符串指針“,一般編譯器都會提示一下的。name也是一個變量,這個變量的類型也是指針,這個指針所指向的是”字符串數組“。在C語言里面,數組其實就是指針,但是是常量,不能寫,只能讀,所以name這個變量可以讀可以寫,但是它指向的內存因為是常量數組所以只能讀不能寫,除此以外name和p沒有任何區別。因此,name+i是指針加法,name+i還是一個指針,指向字符串數組,只不過所指內容和name不一樣,是name的”下一個“,所以p=name+i屬于兩個同類型指針賦值,沒有任何問題;p=name[i]和p=name+i是不一樣的,name定義為一個數組,name[i]是取數組的第i個元素,相當于*(name+i)。(感謝
@單車戀人
指正)但是這個賦值還是會成功的,因為p是指向字符指針的指針,本質還是一個指針,name是一個字符指針的數組,取出的第i個元素是一個字符指針,賦值可以成功,但是類型不一樣(字符指針的指針和字符指針)。p=*name+i性質就變了,就是把name所指向的內容加1,然后賦值給p,name作為一個指針指向的是字符串數組,還好字符串數組也是指針(指針與數組在C語言里面都按照指針處理),所以賦值可以成功,但是會給出編譯警告,因為畢竟他們不是相同類型,p是指向指針的指針,賦值內容是數組,相當于指針。*p=name+i在這里name+i和前面的分析一樣,它和p是相同類型,是指針的指針;而*p是一個指針了,這時候要把它賦給*p還是指針之間的賦值,編譯可以通過,但是指針類型不同,也會給出編譯警告。這里要注意,p是一個變量沒問題,但是*p能不能賦值取決于p指向的空間,如果p指向一塊可讀不可寫的內存,程序運行到這里會運行時退出;如果p指向一塊可寫的內存而且有足夠的空間,那么就沒問題。抱歉第二個文件就不這樣詳細分析了,沒想到這么長太累了,不過思路是類似的。寫了段代碼供參考,用的是64位Linnux下Gcc編譯器,所以打印指針的時候轉換成long類型,如果是32位轉換成int類型,這里p指向的是一塊不可寫內存,所以在*p=name+i那里會運行時報錯:c語言數組賦值為0和用指針實現數組的輸入輸出的問題分享結束啦,以上的文章解決了您的問題嗎?歡迎您下次再來哦!