當前位置:首頁 » 編程語言 » c語言格子地址是格子內容初始值
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言格子地址是格子內容初始值

發布時間: 2022-11-19 03:12:20

㈠ 關於c語言的 變數 地址 和 值

以下是個人理解:
變數具有類型,而類型是編譯器用來分配存儲空間的模板,比如int型分配4個位元組,也就是分配了32位。所以,定義一個變數並不代表分配了一個空間,只是定義了一個分配模板。
只有使用了已經定義的變數,才為其分配空間,如int i=0;
分配空間給所定義的變數和使用變數,兩個的本質是一樣的,並且分配了空間就是使用變數來存儲數值。而存儲了值的那個變數的空間是內存里的存儲單元,所以變數在內存中有一個地址,這個地址是隨機的,也只有使用變數時候才分配的。
其實,直接訪問變數就是直接訪問一個地址,等價於訪問一個指針,如果一個變數里存儲的值是另一地址,那麼就把這個變數當做指針!
本質上,指針和變數沒有任何區別,他們的區別在於:為指針分配的地址空間是固定的,如32位機器就分配32位,64位機器就分配64位;而為變數分配的地址空間是因不同約定的類型的不同而不同的,這里說的是約定的類型,如int分配4個位元組,long int分配8個位元組,float分配4個位元組。
(以上的一些變數類型所佔的位元組是因為編譯平台和編譯機器不同而會有所區別,但現在的機器和平台幾乎都是如此的。)

㈡ c語言棧的初始值存在哪裡

棧底是第一個進棧的數據所處的位置,棧頂是最後一個進棧的數據所在位置。
C語言初始化——棧的初始化 棧是一種具有後進先出性質的數據組織方式,也就是說後存放的先取出,先存放的後取出。

㈢ C語言中的數組定義初始值等問題。

二維數組第一維界限可以省略,具體由第二維界限確定。
對於a[][3]={1,2,3},第二維界限是3,數組元素共3個,因此第一維界限為1。
對於d[3][2]={{1,2},{34}},明確給出了第一維界限、第二維界限,後面各行數組元素部分賦值,部分未賦值。賦值的是d[0][0]、d[0][1]、d[1][0],其餘未賦值。

㈣ C語言數組初始賦值問題

#include<stdio.h>
#defineN1001
intmain()
{
inta[N]={1};//這樣是不能把a數組全部賦值為1的,這樣結果是賦值10000...
intl,n,cnt=0,i,c,b;
scanf("%d%d",&l,&n);
for(inti=0;i<=l;i++)//要先遍歷賦值為1,後面再置0,不然只有第一個是1
a[i]=1;
while(n--)
{
scanf("%d%d",&c,&b);
for(i=c;i<=b;i++)
a[i]=0;
}
for(i=0;i<=l;i++)
if(a[i]==1)
cnt++;
printf("%d ",cnt);
return0;
}

而你初始賦值0之所以得到298,是因為你後來是置1的,自然有得數

而a[N]={1}賦值,除了第一個是1,後面本就全是0,再賦值0,cnt一定等於1

㈤ C語言程序中定義的變數要取得一個初始值一般有哪幾種方法

定義變數取初值:
一、不指定:
全局及靜態變數默認0,局部變數隨機值。
二、定義同時賦初值:
比如int a=1;char str[]="abc";
三、定義時未賦初值,在使用前賦值。
比如int a;a=1;printf("%d",a);
ps:注意函數內靜態變數定義給初值和之後賦值是有區別的,靜態變數的定義賦初值語句,只在第一次調用函數時執行,如定義之後有重新賦值的語句,再次調用函數,靜態變數會保留上次賦值的結果。

㈥ c語言給數組賦初始值是不是實際就是給數組元素賦值呢

是的.
a[2]={1,4,59}是錯誤的.
應該這樣:a[2]={1,4};數組a中有兩個元素.
或者a[]={1,4,59}//讓編譯器自動計算數組中的元素個數.
一般初始化可以這樣a[2]={0}讓數組的兩個元素都初始為0
對於二維以上的就這樣a[2][3]={{0}};//比一維多一對大括弧{}
三維就a[2][3][4]={{{0}}}

㈦ c語言初始化賦值的一般形式公式

C語言的變數初始化,就是在定義變數的時候,賦予一個初始值。

形式為
type var_name = init_value;
其中init_value就是初始化值了。
類似於
type var_name;
var_name = init_value;
不過,基於編譯器的實現,一般初始化值的方式要比先定義後賦值更高效。另外,有些初始化是必須的。比如常量的定義,必須在定義的時候賦予初始化值。
圖注意事項:要藉助工具作圖;是實際光

㈧ c語言中申請地址和初始化問題,(亂七八糟,我是新手)<dev c++>

int a;
while(a<=200)
{...}

這樣的話,a沒有初始化,是不可預料的值,所以完全可能不進入循環,肯定不行的。
int a=0;吧,初始化為0,從0開始,就對了。

㈨ C語言中,對於未初始化的指針變數,其默認值是一個地址,該地址中的內容可能重要,也可能不重要,如果不

一、指針變數的初始化問題

指針變數同普通變數一樣,使用之前不僅要定義說明,而且必須進行初始化,指針的 初始值必須是一個地址,決不允許賦予任何其他數據, 通常是一個數據的地址或地址 變數或空指針。
1、指針變數未被初始化
指針變數未被初始化,指針變數就不會被分配存儲空間。在程序中如果使用了未被分配 空間的指針,就會出現難以查找的錯誤。
如在程序
main()
{int x, p;
x= 100;
*p= x;
printf(「*p=%d\n」,p);
}
中,指針變數p因沒有初始化,在執行語句*p= x;之前p的內容是未知的,當程序將100賦給 一個沒有確定指向內存的指針變數p,而使得數據100被存入一個未知的單元。這個程序雖然 很小,所佔的內存小,問題不明顯,但實質上它卻隱含著一個致命的錯誤。這是因為隨著程 序的增大,很有可能訪問到致命的地址單元,將會導致計算機系統工作區域內有用數據的破 壞,引起數據段操作系統的損毀,造成機器運行失常,甚至 「死機」。
解決方法是指針必須初始化後,才能使用。
本例中 p=&x; 程序便可正常運行。

2、指針初始值可賦值為空值 
指針變數值為0的指針稱為零指針(空指針)。其表示形式為int *p=0;表示p指向地 址為0的單元,系統保證該單元不作其他應用,表示指針變數值沒有意義。可以寫成:
#define NULL (void *)0
int *p=NULL;
定義零指針主要用於避免指針變數的非法引用和在程序中比較指針變數是否為空兩個方 面。因此,不能把一個空指針用於除此之外的其他比較。若某些系統允許第0號內存既可以 被寫入也可以被讀出,這時錯用空指針可能會改寫操作系統的一部分內容,從而使系統徹底 崩潰;若系統只允許讀0號內存,這時空指針指向一個有用的字元串;若系統對0號單元實行 防寫,則對空指針的操作將失敗。.因此,使用空指針時要特別小心。

二、指針變數賦值問題

1、指針賦值帶來的內存丟失
在C語言中指針之間是可以相互賦值的,但是使用不當可能會造成部分內存的「丟失」 ,即這部分內存空間不能再被該任何程序訪問。如: 
main()
{float *a, *b;
a=(float)malloc( sizeof( float));
b=(float)malloc( sizeof( float));
*a= 227. 5;
*b= 163. 9;
a= b;
printf(「%f,%f,*a, *b);
}
上例中將指針變數b賦給了指針變數a,使a與b都指向分配給b的內存空間,而原先分配 給a的內存空間未釋放,不能再被其它任何程序訪問,該內存空間成了「無效內存塊」,內 存空間「丟失」了,而a後來指向的內存單元又直接或間接地被反復調用,內存愈來愈緊張 ,最終「死機」。
解決方法:一個指針變數賦給另一個指針變數前,應先用free( )釋放所佔有的內存空 間,使這部分空間可以由系統重新支配,即應在賦值語句前執行:free (a)。
2、指針變數賦值錯誤
C語言規定,一個指針變數只能指向同類型的變數,不能時而指向一個整型變數,時而 指向一個字元型變數。當然,如果程序中確實需要進行不同類型的 指針變數進行賦值時, 則需要進行強制類型轉換。
3、混淆指針變數和它所指向的數據而導致程序錯誤
如在程序
main()
{int x, *p;
x= 10; p= x;
printf(「%d」,*p);
}
中,語句p= x把數據10而不是10所對應的單元地址賦給指針變數p,因而printf()調用 語句無法在屏幕上顯示x的值。

三、指針用於數組時應注意的問題

1、混淆數組名與指針變數的區別
main()
{int i, a[ 8];
for( i= 0; i< 8; i++)
scanf(「%d」,a++);
}
分析:C語言中約定,指針變數是一個變數,地址為其值;數組名是一個常量指針,在 系統為數組分配存儲單元時確定,其值是該數組首元素的地址。因此.數組名不能自增自減 ,也不能在賦值語句中作左值.常式中企圖通過對a的改變使指針下移,指向欲輸入數據的數 組元素。它的錯誤在於不了解數組名代表的是數組首地址,是一個地址常量,而地址常量的 值是不能改變的。
2、指針越界錯誤
由於對內存中數據放置的錯誤假定,導致指針超出數據對象所佔內存空間的大小。
例:main()
{int a[5], b[5] ;
int *p, i ; 
p=a; 
for (i=0; i<10:i++) *p++=i;}
分析:該程序想通過指針變數p的自加運算來完成用0~9初始化數組a和b,但這是建立 在數組a和b相鄰存放的基礎上的,事實上這種情況並不一定成立。
3、混淆數組與指針的區別
例:main()
{char *p=「beijing」;
p[0]= 『B』;}
分析:程序沒有正確區分數組和指針。在C語言中,當把字元串常量賦予指針時,該字 符串常量就存儲在靜態存儲區中。此時數據不能用指針修改,應用數組的方式進行修改。

㈩ 關於C語言的 變數 地址 和 值

地址和指針是緊密相連的,首先值是放在內存中的一個區域,而內存中的區域都會有不同的編號,這些編號可以認為就是地址。
例如:int*
a是指針變數,int
b=3,
a=b,則是錯誤的,此時a是不等於3的,因為a是指針變數,你不能把b的值賦給它。應該是
b的地址
a=&b,就是正確的,此時a存放的就是b的值在內存中的地址
如果你輸出printf(「%d」,a)與printf(「%d」,*a)
結果是不一樣
前者輸出的是b在內存中的地址,後者輸出的是指針a
指向b的地址的值(即b的值3)