使用靜態陣列應該注意的問題

2021-04-17 07:08:09 字數 1986 閱讀 4402

一:使用靜態陣列應該注意的問題:

1:char靜態陣列用在全域性變數和區域性變數中的區別。

您可以編寫如下簡單的測試,此時

procedure tform1.button1click(sender: tobject);

vararraychar:array[1..100] of char;

begin

arraychar[1]:='a';

arraychar[100]:='6';

end;

你可以在point1處設定斷點,使用滑鼠觀察,執行到該處之前delphi 為

陣列arraychar分配記憶體的情況,可以看到,delphi在開始分配陣列時,

並不為所有的元素置空,應該是隨機分配值的,如果試圖進行這樣的操作,

你如果不理解這一點,在進行某些操作時就可能會感到很迷茫:例如

procedure tform1.button1click(sender: tobject);

varag :array[1..100] of char;

i:integer;

begin

arraychar[1]:='a';

arraychar[99]:='6';

for i:= low(arraychar) to high(arraychar) do

if ag[i]='6' then

showmessage(inttostr(i));

end;

你希望能夠找到的i 的值是 99 ,但是有可能就會得到的是錯誤的值,我

進行了小小的測試,我此時得到的值是 64,94,最後才是99,如果稍加修改,如下:

procedure tform1.button1click(sender: tobject);

vararraychar:array[1..100] of char;

i:integer;

j:integer;

begin

for j:=low(arraychar) to high(arraychar) do

arraychar[j]:=#0;

arraychar[1]:='a';

arraychar[99]:='6';

for i:= low(arraychar) to high(arraychar) do

if arraychar[i]='6' then

showmessage(inttostr(i));

end;

這時,就不會出現先前的情況了,如果你仔細仍然可以使用同樣的方法觀察動態陣列,會發現其實

動態陣列在開始初始化時,是已經將所有的值都置空的。如果是整形的靜態陣列的話,應該設定值為0,

而不是#0。

不過以上的情況是靜態陣列是區域性變數,你可以試著把它放到程式的前面,使它成為乙個全域性變數,你可以

再進行觀察,可以發現這是,delphi已經把所有元素自動置空,這種情況下,你就不需要考慮靜態陣列的

初始化問題了。

對於字串陣列,兩種情況下,初始化時都已經清空了,不需要你去做初始化工作

二:關於動態陣列的越界問題如下:

procedure tform1.button1click(sender: tobject);

vararraydy:array of char;

begin

setlength(arraydy,100);

arraydy[0]:='a';

arraydy[1]:='b';

arraydy[99]:='c';

arraydy[100]:='d';//error! 越界

arraydy[101]:='e'; //error!越界

showmessage(arraydy[101])

end;

這是雖然陣列arraydy[100],arraydy[101]都已經越界,但是程式卻照常執行。要能夠讓delphi能夠做出

提示,可以開啟:project optionscomplierange checking開關。

使用py solc時候應該注意的問題

在安裝py solc後,如果系統還沒有安裝solidity的話,會遇到以下的問題 oserror errno 2 no such file or directory 所以需要在系統上安裝solidity環境才可以執行 在ubuntu上安裝solidity環境如下 sudo add apt repos...

ssh 使用時應該注意的問題

因為使用spring來管理整個專案類的載入和解除安裝,一 所以當使用 resource name userservice private userservice userservice 這個注釋注入載入的時候就要注意了。如 a類是資料庫操作類 b類使用了 resource這個注釋注入a類 當在c類中...

在使用靜態建構函式的時候應該注意幾點

1 靜態建構函式既沒有訪問修飾符,也沒有引數。因為是.net呼叫的,所以像public和private等修飾符就沒有意義了。2 是在建立第乙個類例項或任何靜態成員被引用時,net將自動呼叫靜態建構函式來初始化類,也就是說我們無法直接呼叫靜態建構函式,也就無法控制什麼時候執行靜態建構函式了。3 乙個類...