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

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

C++語言--數(shù)組-6.1----數(shù)組在內(nèi)存中的分布、數(shù)組名和函數(shù)、枚舉常量

2019-11-09 18:27:42
字體:
供稿:網(wǎng)友

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

1.數(shù)組在內(nèi)存中的分布

我們來分析為什么a[0]=3?在C++中我們知道數(shù)組b中的最大下標(biāo)角為9,當(dāng)我們賦值給b[10]時(shí),即使在數(shù)組b中下標(biāo)10已經(jīng)越界,但是

編譯器還是會(huì)留存四個(gè)字節(jié)的地址給b[10]存放數(shù)值3,而a[0]的數(shù)組的存放地址恰恰是b[10]的存放地址,這也是a[0]為什么是3的原因了。

那我們?cè)趺唇鉀Q這一問題了?C++不同于java,如在java中這么寫程序必然會(huì)報(bào)錯(cuò),這是因?yàn)槌鲞吔绲臄?shù)組無法通過編譯。要在C++中

避免這種尷尬的局面,只好由程序員謹(jǐn)慎的規(guī)范。

2.數(shù)組名與函數(shù)

我們知道數(shù)組在定義的時(shí)候系統(tǒng)會(huì)自動(dòng)創(chuàng)建一個(gè)指向該數(shù)組的指針,并且該指針自動(dòng)指向該數(shù)組的第一個(gè)元素。

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

3.枚舉常量

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

形式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.枚舉元素是常量,不是變量,所以不能對(duì)枚舉元素進(jìn)行賦值;

3.枚舉元素是常量,其常量值不是列舉的“內(nèi)容”,而是定義時(shí)的次序號(hào):0,1,......,n;

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

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

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

7.枚舉元素不是字符串,可進(jìn)行邏輯判斷比較運(yùn)算。

4.strcat等系列函數(shù)表達(dá)的意義

 %20  

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

字符串連接之后數(shù)值保存在第一個(gè)數(shù)組中,第二個(gè)保持不變。

我們需要注意的是:

 1.第一個(gè)數(shù)組的字符長度要比第二個(gè)大,不然會(huì)報(bào)錯(cuò)誤。

 2.每個(gè)字符串結(jié)尾處都有一個(gè)結(jié)束標(biāo)志“/0”。當(dāng)通過strcat函數(shù)連接起來的時(shí)候,連接的字符串結(jié)尾處也有一個(gè)

結(jié)束標(biāo)志“/0”,它是第2個(gè)字符串的,而第1個(gè)字符串的結(jié)束標(biāo)志則自動(dòng)取消。

   

     4.2   strcpy函數(shù):是string copy的縮寫,即字符串復(fù)制。

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

              說明:dest的地址長度要足夠大,不然會(huì)產(chǎn)生溢出。Dest的內(nèi)存長度要大于等于src的內(nèi)存長度。

例子1.利用字符數(shù)組

     

#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里面的字符串復(fù)制到str1數(shù)組中Cout<<str1<<endl}

輸出結(jié)果是abcdef;

    

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

比較兩個(gè)字符串。設(shè)這兩個(gè)字符串為str1,str2,若str1=str2,則返回零;若str1>str2,則返回正數(shù);若str1<str2,則返回負(fù)數(shù)。

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

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

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

  說明:返回s的長度,不包括結(jié)束符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;  }  下面給大家提供幾種實(shí)現(xiàn)strlen函數(shù)的源代碼,供大家參考:  -------------------------------------------------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----------------------------------------

  簡單的總結(jié)一下:

  以上各種實(shí)現(xiàn)的方式都是大同小異的,有的用的是變量,有的用的是指針。

  其中,最后一個(gè)用的是遞歸的方式。其實(shí),在實(shí)現(xiàn)庫函數(shù)的時(shí)候,是規(guī)定不可以

  調(diào)用其他的庫函數(shù)的,這里只是給大家一個(gè)方法,不用變量就可以實(shí)現(xiàn)strlen。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 渝中区| 建始县| 永城市| 邵阳市| 荣成市| 仲巴县| 平山县| 仲巴县| 铁岭市| 蕲春县| 静乐县| 龙门县| 岫岩| 上杭县| 峨山| 阿荣旗| 登封市| 连州市| 阜阳市| 寻乌县| 南皮县| 铁岭市| 墨脱县| 万载县| 河曲县| 宕昌县| 镇安县| 大竹县| 沈丘县| 丰镇市| 铜梁县| 绥滨县| 白玉县| 华亭县| 宝应县| 洛宁县| 望江县| 喀喇沁旗| 呼伦贝尔市| 五河县| 科技|