C 關於陣列的一些看法

2021-08-15 00:02:10 字數 1412 閱讀 5160

本來想等我完全學完c++再好好一些篇心得總結,還有歸納好c++的一些常用知識點。但是今天看看了陣列,雖然學習c語言的時候,陣列也學得差不多,但是今天學到了一些新的知識點,覺得非常有用,就忍不住寫下來了。

其次對元素的賦值。可以是  int a[3] =   (初始化便賦值);也可以:

int a[3];

a[0] = 1;

a[1] = 2;

a[2] = 3;

但是,一定不能這樣:

int b[3];

b=;//更加不能b[3] = ;首先b[3],這裡是認為b這個陣列的第四個元素,然而上面陣列的定義只有3個記憶體單元。

然後,談一下字串和字元陣列。其實字串就是字元陣列,因為字串再記憶體存放就是乙個陣列。

char s1[5] = ;//char s1 = ;

char s2[5] = "abc" ;//其實這個兩者並不等價上面的要加上『\0'才行,即上面的注釋。

接著,說一下我今晚搞明白的新的知識:(程式在vs2017版本上編譯)

char s2[4] = "abc";//這樣編譯不會出錯,輸出也正常,沒有發生亂碼。這個是因為"abc"這個字串本身就是含有\0結尾。

char s2[4] = ;//這樣編譯不會報錯,但是輸出不正常,輸出結果往往是abc接著一堆亂碼

char s2[4] = ['a','b','c','\0'};//這樣編譯不會出錯,輸出也正常

char s2[4] ;

s2 [0]='a';

s2 [1]='b';

s2 [2]='c';//這個也編譯沒報錯,但是輸出也是abc加亂碼,但是在加上一句s2 [3] = '\0';那就正常了。

char s3[2];

s3 [0] = 'a';

s3 [1] = 'b';

s3 [2] = 'c';

s3 [3] = '\0';//這樣子,編譯沒報錯,但是卻不能輸出,也就是的除錯時,那個面版沒有顯示。

從以上例子可以知道,想要陣列輸出正常,必須要有\0這個符號,沒的話,輸出會有亂碼(但是書本上說s[4]=這種後面是會自動補

\0。這個應該是個全域性變數)。以下是這個網友給出的答案,我編譯過,的確是這樣的。但是還有乙個問題,為什麼我們定義了這個數字的記憶體大小之後,輸出這個陣列,它可以訪問超過它的記憶體之外的儲存空間呢?指標是可以指向任何地方,也就是它訪問任何地方(有些記憶體不許訪問的除外),但是,它不能保證不會出錯。

關於搜尋,我的一些看法

目前的搜尋大體分通用搜尋和垂直搜尋。兩者差別在於資訊 通用的範圍很廣,所以資料量一般都是海量。垂直的資訊 比較單一,所以資料量相對而言就小。技術角度而言,通用主要關注資料量,偏重架構設計,而垂直著重搜尋的ui。如何設計好乙個架構,我覺得自己還在摸索,所以不多說,感興趣的可以看看google的 垂直搜...

關於C 的右值引用的一些看法

關於c 中的右值引用的詳細可以看這一批博文 從4行 看右值引用 那一篇博文詳細結合四行簡單的 詳細介紹了右值引用的使用方法和一些場景,非常實用。而本篇博文主要介紹一下我在學習右值引用的一些心得。因為在學習右值引用的時候,有一些地方非常難理解。所以寫下這一篇博文,防止遺忘,由於對於c 涉獵不多,所以有...

關於C 中const 返回型別的一些看法

看下面這段 class cpentry class a int main 上面的這段 在編譯時沒有任何的警告,執行時也不會出現問題。但當cpentry有乙個指標型別的變數時就可能會引發無效指標問題。再看下面這段 class cpentry class a int main printf s test...