国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++語言--數組-6.1----數組在內存中的分布、數組名和函數、枚舉常量

2019-11-09 19:02:28
字體:
來源:轉載
供稿:網友

前言:2017年第一篇博客,祝大家新年快樂!!

1.數組在內存中的分布

我們來分析為什么a[0]=3?在C++中我們知道數組b中的最大下標角為9,當我們賦值給b[10]時,即使在數組b中下標10已經越界,但是

編譯器還是會留存四個字節的地址給b[10]存放數值3,而a[0]的數組的存放地址恰恰是b[10]的存放地址,這也是a[0]為什么是3的原因了。

那我們怎么解決這一問題了?C++不同于java,如在java中這么寫程序必然會報錯,這是因為超出邊界的數組無法通過編譯。要在C++中

避免這種尷尬的局面,只好由程序員謹慎的規范。

2.數組名與函數

我們知道數組在定義的時候系統會自動創建一個指向該數組的指針,并且該指針自動指向該數組的第一個元素。

從上面我們可以看到,在main函數中我們其實操作的就是x[2]中的內存地址中的值。

3.枚舉常量

定義:把變量的值一一列舉,變量的值只能取其中的一個。

形式1:

[cpp] view plain copy 在CODE上查看代碼片enum city{上海,北京,南京,廣州};//city為枚舉類型名  city city1,city2;//city1,city2為city枚舉類型的變量  形式2:

[cpp] view%20plain copy enum city{上海,北京,南京,廣州}city1,city2;  

例子:

[cpp] view%20plain copy #include <iostream>  using namespace std;  enum city {beijing, shanghai, shandong, guangzhou=7, tianjin};  void fn(enum city c)  {      switch(c)      {          case 0:cout << "beijing/n" << endl;break;          case 1:cout << "shanghai/n" << endl;break;          case 2:cout << "shandong/n" << endl;break;          case 7:cout << "guangzhou/n" << endl;break;          case 8:cout << "tianjin/n" << endl;break;          default :cout << "非法城市!/n" << endl;break;      }  }  int main()  {      enum city c1, c2, c3, c4;      c1 = (enum city)2;      c2 = shandong;      c3 = beijing;      c4 = (enum city)4;      fn(c1);      fn(c2);      fn(c3);      fn(c4);      cout << c1 << " " << c2 << " " << c3 << " " << c4;      return 0;  }  枚舉常量的使用說明:

1.先定義枚舉類型,在定義枚舉常量,然后使用枚舉常量;

2.枚舉元素是常量,不是變量,所以不能對枚舉元素進行賦值;

3.枚舉元素是常量,其常量值不是列舉的“內容”,而是定義時的次序號:0,1,......,n;

4.枚舉元素值在定義時可以人為指定;

5.枚舉變量的值只能取定義枚舉類型時所列舉的元素之一;

6.盡管枚舉元素有值,但是此值并不是整型值,所以不能把整型數賦值給枚舉變量;

7.枚舉元素不是字符串,可進行邏輯判斷比較運算。

4.strcat等系列函數表達的意義

 %20  

 %20 %204.1%20 strcat函數:是string%20catenate的縮寫,即字符串連接。

字符串連接之后數值保存在第一個數組中,第二個保持不變。

我們需要注意的是:

 1.第一個數組的字符長度要比第二個大,不然會報錯誤。

 2.每個字符串結尾處都有一個結束標志“/0”。當通過strcat函數連接起來的時候,連接的字符串結尾處也有一個

結束標志“/0”,它是第2個字符串的,而第1個字符串的結束標志則自動取消。

   

     4.2   strcpy函數:是string copy的縮寫,即字符串復制。

從src地址開始且含有null結束符的字符串復制到以dest地址開始的字符串中,并返回指向dest的指針。通俗的講就是將 src字符數組復制到dest數組中,如果dest數組本身有數據,會把src里的數據全部復制到dest中,如果dest中有數據小于src地址長度的將會被覆蓋,而大于src長度的將保留

              說明:dest的地址長度要足夠大,不然會產生溢出。Dest的內存長度要大于等于src的內存長度。

例子1.利用字符數組

     

#include<iostream>         Using namespace td;#include<string.h> Int mian(int argc, _TCHAR* argv[]){         Char str1[8];Char str2[6]=”abcdef”;Strcpy(str1,str2);//將str2里面的字符串復制到str1數組中Cout<<str1<<endl}

輸出結果是abcdef;

    

    4.3   strcmp函數:是string compare的縮寫,即字符串比較。

比較兩個字符串。設這兩個字符串為str1,str2,若str1=str2,則返回零;若str1>str2,則返回正數;若str1<str2,則返回負數。

原型:extern int strcmp(const char *s1,const char * s2);所在頭文件:string.h功能:比較字符串s1和s2。一般形式:strcmp(字符串1,字符串2)說明:當s1<s2時,返回為負數當s1=s2時,返回值= 0當s1>s2時,返回正數即:兩個字符串自左向右逐個字符相比(按ASCII值大小相比較),直到出現不同的字符或遇'/0'為止。如:"A"<"B" "a">"A" "computer">"compare"特別注意:strcmp(const char *s1,const char * s2)這里面只能比較字符串,不能比較數字等其他形式的參數。

     4.4  strlen函數:是string length的縮寫,即字符串長度。

  功能:計算字符串s的(unsigned int型)長度

  說明:返回s的長度,不包括結束符NULL。

  舉例

  

// strlen.c  #include <syslib.h>  #include <string.h>  main()  {  char *s="Golden Global View";  clrscr();  PRintf("%s has %d chars",s,strlen(s));  getchar();  return 0;  }  下面給大家提供幾種實現strlen函數的源代碼,供大家參考:  -------------------------------------------------1:start------------------------------------  #include <stdio.h>  #include <assert.h>  typedef unsigned int u_int;  u_int Mystrlen(const char *str)  {  u_int i;  assert(str != NULL);  for (i = 0; str != '/0'; i++);  return i;  }  ------------------------------------------------1:end--------------------------------------  -------------------------------------------------2:start--------------------------------------  int strlen(const char *str)  {  assert(str != NULL);  int len = 0;  while((*str++) != '/0')  len++;  return len;  }  ------------------------------------------------2:end ------------------------------------------  ------------------------------------------------3:start------------------------------------------  int strlen(const char *str)  {  assert(str);  const char *p = str;  while(*p++!=NULL);  return p - str - 1;  }  -------------------------------------------------4:end-----------------------------------------  -------------------------------------------------5:start----------------------------------------  int strlen(const char *str)  {  assert(str);  const char *p = str;  while(*p++);  return p - str - 1;  }  -----------------------------------------------6:end----------------------------------------

  簡單的總結一下:

  以上各種實現的方式都是大同小異的,有的用的是變量,有的用的是指針。

  其中,最后一個用的是遞歸的方式。其實,在實現庫函數的時候,是規定不可以

  調用其他的庫函數的,這里只是給大家一個方法,不用變量就可以實現strlen。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 瑞安市| 铅山县| 兴隆县| 天等县| 石楼县| 确山县| 彭水| 霍城县| 滦平县| 任丘市| 永寿县| 海原县| 施秉县| 周至县| 德庆县| 东明县| 六安市| 汝城县| 宁晋县| 伊川县| 长岛县| 南部县| 蛟河市| 太湖县| 绥中县| 崇明县| 南华县| 渝北区| 古丈县| 桦甸市| 根河市| 江安县| 新乐市| 泾阳县| 岢岚县| 南丰县| 保靖县| 河池市| 东乡族自治县| 延长县| 青神县|