當前位置:首頁 » 存儲配置 » c數組存儲

c數組存儲

發布時間: 2022-12-20 07:08:04

c語言數組儲存量

c[3]是可以存儲3個字元的,c[n]就是存儲n個字元,n是int
整形常量.
對於,以上你提出的問題,定義一個字元數組
c[3],的確,他只可以儲存三個字元,分別儲存在c[0],c[1],c[2],但是,在c/c++中並沒有檢查數組是否越界或者是超界的功能,所以,在scanf(),語句中,我們輸入的字元,c/c++是沒有檢查,所以,理論上我們只能輸入兩個字元,最後一個留給系統自動添加的\0,
但是,實際上,我們輸入的字元.qwe是可以正確運行的,最後,系統也會自動添加\0,但是,添加的\0,就可能在數組定義之外了,可能就是系統在定義數組的之後,對於我們輸入的其他字元也相應在數組定義之後的一連串空間中繼續添加,所以,可以輸入大於3的字元都可以正常輸出,但是,會報錯!錯誤是數組的訪問越界了吧!以上純屬個人理解,僅供參考!希望對你有幫助!^_^.

Ⅱ C語言用數組存儲大型數據的演算法

/*
size_a,pa——指向數組a的有效末端
ma——a的最大容量,必須大於na

n=12——求n的階
p——求階乘時的當前乘數
*/
#include<stdio.h>
#define Ma 10000
int pa;/*指向數組a的有效末端*/
int p=2;
int memory_over=0;
union data
{ unsigned long int b;
struct
{unsigned l:16;
unsigned h:16;
}m;
}a[Ma];
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
演算法說明1:考慮到result比較長,我用a[Ma].b來存儲n!的result,每一位a[pa].b能存儲4位10進制數字。
因為我定義的數組是靜態的,所以Ma應該足夠大。
ps:其實只用定義一個unsigned long int b[Ma];就可以了(直接用b[pa]代替a[pa].b),但是我考慮到可能會訪問每一結點b[pa]的高16位(a[pa].m.h)和低16位(a[pa].m.l),但是的我考慮是多餘的!!不用像我這樣定義這么復雜的共用體!!
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
unsigned int cashe;
unsigned int carry;

void main()
{
unsigned int n;/*求n的階*/
void facto(unsigned int n);
printf("Input n:");
scanf("%u",&n);
/*=================開始求階乘!=============*/
a[0].b=1;/*初始化*/
facto(n);
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
演算法說明2:上面這句直接調用facto(n)來求n!
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
/*========================以下是顯示最後結果====================================*/
if(memory_over==0)
{printf("the result include %dNO:\n",pa+1);
printf("%u",a[pa--].m.l);
for(;pa>=0;pa--)
printf("%04u",a[pa].m.l);
printf("\n");
}
getch();
}

/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
演算法說明2:求階函數facto(n)說明:
這個函數會不斷地調用multiple(),它的作用是每被調用一次就使得a[pa].b與階數p相乘一次,直到乘完n為止!
{multiple();
p++;/*每一輪乘一個階數p*/
}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
void facto(unsigned int n)
{void multiple();
pa=0;
while(pa<Ma-1&&p<=n)/*容量限制*/
{multiple();
p++;/*每一輪乘一個階數p*/
}
if(p<=n)
{printf("memory out!\n");memory_over=1;}/*如果當前的存儲結果的數組a[Ma]不夠用!應提高Ma*/

}

/*==============================================================================
演算法說明3:乘法函數multiple()說明:負責a[pa].b與階數p相乘。
a[pa].b有很多結點,a[0].b、a[1].b、a[2].b、a[3].b、a[4].b、。。。
當然是從低結點a[0].b開始不斷與p相乘,產生的「進位」加到高位a[1].b,直到a[pa].b*p為止!

隨著結果數值增大,pa個結點的a[].b可能容納不下結果,所以如果a[pa].b與p相乘後還有「進位」carry,就擴大pa,並把carry放入到新增加的結點:
if(carry>0)
a[++pa].b=carry;
===================================================================================*/
void multiple()
{int i=0;
carry=0;
while(i<=pa)/*i指向當前處理的元素a[i],每一輪用一個位與階數p相乘*/
{a[i].b=a[i].b*p+carry;/*計算結果,要考慮來自低位的進位*/
carry=a[i].b/10000;/*計算進位*/
a[i].b=a[i].b%10000;/*計算余數*/
i++;
}
if(carry>0)
a[++pa].b=carry;
}

Ⅲ C 語言 數據結構 數組存儲位置的計算

1)存放該數組需要242個單元
2)存放第四列需要22個單元
3)按行存放,元素a[7,4]起始地址為 s+182
4)按列存放,元素a[4,7]其實地址為 s+142

Ⅳ C語言在數組中儲存字元

性質都一樣,在c語言中字元數組就是字元串。strcpy和strncpy用途是一樣的,後者限制了拷貝字元的長度,超過長度將丟棄不拷貝。比如有a1[5],a2[]="123456",strncpy(a1,a2,5),後a1就是"12345"了,因為限制了拷貝5個長度,後面多出的就被丟棄了。而strcpy做不到這一點,它會沒有限制地拷貝,如果超出數組所能容納的長度,多餘的就會溢出到內存中。所以說strncpy是strcpy的安全模式。

Ⅳ c語言數組存儲

你可知道char b[][100]={0};這是什麼意思嗎?當你不指定第二維的長度,初始化時又沒明確指出其長度,那麼編譯器就會把上式變為:char b[1][100]={0};結果你只開辟了1組100個char的數組,你還以為能有10組,當然錯誤啦。如果明確包含10個字元串,請明確指定:char b[10][100]={0};

你這個彈錯,意思就是你開辟的內存空間不夠,導致strcpy函數運行時緩沖區溢出,這使得程序跳轉到一個非法的區域,這個區域被操作系統標記為保護,於是觸發「CPU常規保護異常」。

以下僅作談資,騙分數用的^ ^。
我印象中,如果是「CPU常規保護異常」,可能意味著你這跳轉到的地方是操作系統內核區。當CPU以用戶許可權等級(最低許可權等級,你這個main函數執行時,printf函數執行前或執行後是就是這種狀態)嘗試跳轉到/訪問需要CPU最高特權等級的區域就會觸發這類錯誤。

Ⅵ C語言,如何把一個數組存放到txt文件中去

1、使用VS新建空工程,直接點擊確定。

Ⅶ C語言用數組存儲大型數據的演算法

樓主一定懂c++吧?c++標准庫裡面有一個模板類叫
bitset<>
專門用來做位操作的。
你的問題用這個可以高效的解決,建立一個足夠大的空間,比如8000個位
bitset<8000>
然後就簡單了,乘法函數把乘數轉化成bitset<32>類型的對象(用乘數直接初始化代表乘數的bitset<32>對象)然後用位運算符把被乘數(那個bitset<8000>類型的對象)按位右移,(一個10進制數右移一次相當於乘10,一個2進制數右移一次相當於乘2;乘數中,二進制位如果知道它是從右數第n位,那麼就把被乘數向右移動n-1位就完成了乘法,然後再做下一個二進制位的乘法,直到被乘數中所有的2進制位都被使用過為止)。做完了每32位2進制位轉化成一個unsigned
long,存儲在一個鏈表或者數組(懷疑空間不夠,內存里很有可能沒有這么大的連續空間)中,如果按順序逐個輸出就是問題的結果。
我覺得這個方法比2樓的高效。
如果你不想使用c++標准庫……那也可以考慮用c中的位域,也支持位操作。不過遠沒有前面的方便,很多操作都要自己做,比如最基本的你必須有一個適合乘法操作的動態增長的位域組成的鏈表。而且即使這樣還不一定高效。
……寫完了才看的3樓,3樓就做得很好了。

Ⅷ C中數組在內存的存儲

b是那一塊地址空間的名字叫1000,3是地址空間里的數據!定義指針也是如此,如int *a;僅僅是起了個地址空間的名字,卻沒有為它分配地址空間,所以直接給它賦值是不合法的,注意區分開空間名和真正的空間。。。。

Ⅸ C語言數組儲存量

c[3]存儲的是/0,所以輸入四個不報錯,輸入5個時有可能不報錯,但是數組的地址是連續的,若c[4]所在的內存地址非空,那麼就會出錯。所以還是開合適大小的數組比較好。當然推薦用C++中的string類型

Ⅹ C語言如何定義一個數組存放字元和數字

1、首先,編寫頭文件以及main函數主框架。

注意事項:

盡管C語言提供了許多低級處理的功能,但仍然保持著跨平台的特性,以一個標准規格寫出的C語言程序可在包括類似嵌入式處理器以及超級計算機等作業平台的許多計算機平台上進行編譯。

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:600
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:892
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:585
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:769
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:689
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1016
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:261
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:119
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:809
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:718