1. 程式人生 > >c++陣列易錯點總結

c++陣列易錯點總結

c++陣列

1、只有在定義陣列是才能使用初始化,此後就不能使用了,也不能將一個數組賦給另一個數組

int cards[4] = { 3 , 6 , 8 , 10};   //ok
int hands[4] ;                      //ok
hand[4] = {5 , 6 , 7 ,9};           //error,只能在定義時初始化
hand = cards;                       //error,不能將一個數組賦給另一個數組 //陣列名是常量

2、對於陣列的下標,編譯器不會檢查使用的下標是否有效。

3、sizeof運算子返回型別或資料物件的長度(單位為位元組)。注意,如果將sizeof運算子用於陣列名,得到的殭屍整個陣列中的位元組數。但如果將sizeof用於陣列元素,則得到的將是元素的長度(單位為位元組)。

4、陣列初始化:

  • 初始化陣列時可省略等號;
int cards[4] { 3 , 6 , 8 , 10};   //ok
  • 可不在大括號內包含任何東西,這將把所有的元素都設定為0;
int cards[4]={};    //所有元素都設定為0
double hands[] {};  //所有元素都設定為0
  • 列表初始化禁止縮窄轉換。
long plifs[] = {25, 92, 3.0};           //不允許
char slifs[4] = {'h', 'i', 23, '\0'};   //不允許

5、用引號括起的字串隱式地包括結尾的空字元,因此不用顯式地包括它。

char
bird[11] = "Mr. Cheeps"; //隱式地包括結尾的空字元,因此不用顯式地包括它 char fish[] = "Bubbles"; //讓編譯器計算長度

6、在陣列中使用字串:sizeof運算子指出整個陣列的長度,但strlen()函式返回的是儲存在陣列中的字串長度,而不是陣列本身的長度。另外,strlen()只計算可見的字元,而不把空字元計算在內。

7、指標和陣列:
- 對陣列應用sizeof運算子得到的是陣列的長度,而對指標應用sizeof得到的是指標的長度,即使指標指向的是一個數組。
- 很多情況下,可以以相同的方式使用指標名和陣列名。對於它們,可以使用陣列方括號表示法,也可以使用解除引用運算子(*)。在多數表示式中,它們都表示地址。區別之一是,可以修改指標的值,而陣列名是常量。


- 陣列名被解釋為其第一個元素的地址,而對陣列名應用地址運算子時,得到的是整個陣列的地址

short tell[10];         //宣告一個20個位元組的陣列
cout << tell <<endl;    //輸出&tell[0],即第一個元素的地址
cout << &tell <<endl;   //整個陣列的地址

從數字上說,這兩個地址相同;但從概念上說,&tell[0] (即tell)是一個2位元組記憶體塊的地址,而&tell是一個20位元組記憶體塊的地址。因此,表示式tell+1將地址值加2,而表示式&tell+2將地址值加20。

8、在cout和多數C++表示式中,char陣列名、char指標以及用引號括起來的字串常量都被解釋為字串第一個字元的地址。

相關知識:
- 如果給cout提供一個字元地址,則它將從該字元開始列印,直到遇到空字元為止。
- 用括號括起的字串也應當是一個地址。在C++中,用引號括起的字串像陣列名一樣,也是第一個元素的地址,這意味著對於陣列中的字串、用引號括起的字串常量以及指標所描述的字串,處理的方式是一樣的,都將傳遞它們的地址。
- 字串字面值是常量。

9、在C++中當且僅當用於函式頭或原型中,int arr和int arr[]的含義才相同。在其他上下文中,int arr 和int arr[]的含義並不同。

int sum_arr(int arr[], int n)
int sun_arr(int *arr, int n)
int sum_arr(int arr[n])         //error,不要試圖使用方括號表示法來傳遞陣列長度

傳遞常規變數時,函式將使用該變數的拷貝;但傳遞陣列時,函式將使用原來的陣列。

相關推薦

c++陣列總結

c++陣列 1、只有在定義陣列是才能使用初始化,此後就不能使用了,也不能將一個數組賦給另一個數組 int cards[4] = { 3 , 6 , 8 , 10}; //ok int hands[4] ; /

C語言總結

       最近又把C語言看了一遍,發現了很多之前學C語言時沒有注意到但又很容易出錯的地方,現在總結出來和大家一起分享。可能有疏忽紕漏,歡迎大家指正。         一下分為幾個部分分別加以說明。 一、關鍵字 1.什麼是定義?什麼是宣告?兩者有何區別? 答:定義是建立一

C++ 筆試題總結(類和物件)

1、建構函式的意義:(1)由於類的部分成員是私有的,若程式需要對其進行初始化,只有通過成員函式實現。(2)在宣告物件時自動呼叫建構函式。2、建構函式沒有返回值,但不被宣告為void,即沒有宣告型別。3、每次建立類物件(甚至使用 new 動態分配記憶體時,C++都會使用建構函式

C語言基礎知識總結

1.定義了變數一定要儘快賦一個值,我們叫初值。因為定義變數實際上是在記憶體中開闢了一塊新空間,但空間裡也許有之前留下的東西(資料)。所以,如果你不用初值把這塊空間覆蓋掉,很容易在後面出現莫名其妙的問題。

C++總結

返回值 oat 相對 變量 不堪 法規 內容 c++ 默認參數 在眾多編程語言中,C++語法規則是相對較為復雜的,其繼承和重載規則靈活多變,往往會讓初學這苦惱不堪,下面對於C++的一些易錯點進行的總結,希望有所幫助,本文章會持續更新。 函數重載與默認參數的二義性 在函

OO總結

space tor 初始化列表 audio 子類 book white hit 類的初始化 在寫子類的構造函數時,要在初始化列表中指定使用的父類的構造函數並完成其初始化,如下例: p,li { white-space: pre-wrap } AudioBook(co

C語言

C語言易錯點 1.每個C語言程式中main函式是有且只有一個的。 2.演算法可以沒有輸入,但必須要有輸出。 3.在函式中不可以再定義函式。 4.break可用於迴圈結構和switch語句。 5.break和continue的區別在於前者是跳出迴圈,後者是結束本次迴圈。 6.逗號的運算子的級別最低。

C/C++入門及常用小技巧

1. int型 :絕對值在10^9範圍內的整數都可以定義成int型。 2. long long型 :如果long long型賦值大於2^31 -1的初值,則需要在初值後面加上LL,否則會編譯錯誤。 3. float、double輸入輸出格式 :使用printf("%f",

陣列

陣列易錯點: 1.初始化定義: 1.int n[常量表達式] 常量表達式不能為變數 2.int main()內與int main()外的陣列初始化定義有區別: int main()內初始化為隨機,int main()外初始化值為0 2.資料範圍: a[i] 的i範圍不能超過常量表達式

計算機二級Java筆記/重難點總結(按章節歸納整理)

一、java的體系結構: 1、Java程式首先由編譯器轉換為標準位元組程式碼,然後由虛擬機器來解釋執行      Applet是java的一類特殊應用程式,它潛入HTML中,可以實現多媒體的使用者介面或複雜的計算,可以在瀏覽器上執行; 2、JDK的bin目錄下由編譯器、

java進階複習——常見總結

本博文用於記載java進階中一些難點和易混淆的知識點,並不詳細,也不全面,適合有java基礎的朋友進行復習鞏固。 (部分內容為從PPT中拷貝,侵刪) 裡面編號有點問題,以後再改吧,先湊合著看看 一、反射 反射中我們可以通過Class 物件來反射出

C語言(函式裡修改傳入變數的值不會改變傳入變數的指標)

函式裡修改傳入變數的值不會改變傳入變數的指標    相關語句如下: uint8_t a,b,c;     a=4;     b=6;     c=0;     oled_printf(0,0,"a:%d b:%d c:%d",a,b,c);     c=Max_Commo

SSM+AJAX整合難點,總結

1.靜態資源訪問問題    如果想通過jsp檔案跳轉到某個特定的html或者jsp檔案(比如網站首頁僅僅是展示一些靜態的宣傳資訊,沒有涉及到後臺邏輯互動),可以設定這些特定的html或jsp檔案與某資料夾中,然後在spring-mvc.xml配置檔案中將該資料夾設定靜態訪問就

C語言解析(一)

#include "stdio.h" int main() { int a,b,c,d; printf("第一次輸入:"); scanf("%d%d",&a,&b);

C語言--

一下,均為菜鳥總結的經驗,如有錯誤歡迎指正。 1、c語言&和*具體區別 &是取址符號,取得變數的地址; 地址 資料 5c 213 當我們執行  int i =123 時,編譯器為分配地址“5c”,裡面儲存的資料位213; 因此執行 &i 時,取的數

C/C++入門及賽車盤口搭建出租常用小技巧

介紹 空格 因此 {0} 我們 for 無法識別 != ring 1. int型 :賽車盤口搭建出租【企鵝21717-93408】絕對值在10^9範圍內的整數都可以定義成int型。 2. long long型 :如果long long型賦值大於2^31 -1的初值,則需要

C# 四舍五入中一處

它的 參數 需要 進位 註釋 info 出了 返回 .com ,你沒看錯,四舍五入的結果 和我們期待的不太一樣 Why?? 進入源碼看下,註釋中解釋的很清楚。。 默認情況下,Math.Round()方法返回的是最接近的整數,這個沒問題,問題是當要轉換的數

阿里P7總結:JavaScript面試頻繁出現的幾個

一 前言 這段時間,金三銀四,很多人面試,很多人分享面試題。在前段時間,我也臨時擔任面試官,為了大概瞭解面試者的水平,我也寫了一份題目,面試了幾個前端開發者。在這段時間裡面,我在學,在寫設計模式的一些知識,想不到的設計模式的這些知識,就是面試題裡面,頻繁讓人掉坑的考點。所以,今天就總結一下,那些

C++基礎知識和易混淆總結匯總(不定時更新)

以下是我本人不定時更新的易錯點彙總,如需轉載,請註明出處。 1、對指標的引用 int a = 10; int *p = &a; //初始化指標p。 int* &pa = p; //這個是對指標p的引用、在我們使用pa的操作。相當於對p的操作 2、函

C語言中指標的一些

1、字元陣列與字串的使用 注意:陣列名是指向陣列首個元素的地址。 先看個例子: #include <stdio.h> int main() { char *str = "hello"; int len = strlen(str); int