C++ [ 數組,指針,字符串 ]

數組

初始化在聲明數組時給部分或全部元素賦初值

int a[3]={1,1,1}  等價於 int a[]={1,1,1}

int a[2][3]={1,0,0,1,0,0} 等價於 int a[][3]={1,0,0,1,0,0}

使用數組名傳遞數據時,傳遞的是地址

void RowSum( int A[][4] );

RowSum(table);

對象數組

類型 數組名[下標表達式]

數組名[下標].成員名

Location A[2]={Location(1,2)}; //默認構造函數初始化A[1]

指針

數據類型 *標識符

int *p; //聲明一個int型指針

cout<<*p; //輸出指針p所指向的內容

int &rf; //聲明一個int型的引用

int *pa = &b; //取對象的地址

1. 聲明指向常量的指針

const char *name1="abc";

char s[] = "abcd";

name1 = s;    //name1本身的值可以改變,所指向的常量不被意外改變

// *name = '1';  

// name = 'A'

2.指針類型的常量,本身的值不能改變

char *const name2 = "John";

name2 =  "abc";

3. 任何類型的指針都可以賦值給void類型的指針變量

void *pv;

pv = &i;

int *pint;

pint = (int *) pv;


int *p = 0; 不指向任何地址

指針特別適合處理存儲在一段連續內存空間中的同類數據

int a[10]={1,2,3,4,5,6,7,8,10};

int *p;

for(p=a; p<(a+10);p++){

cout<<*p<<" ";

}

指針數組

每個元素都是指針變量

類型名 T *數組名[下標表達式]

int * p_line[3];  p_line[0]=line1; ...  cout<<p[i][j]<<endl;

cout<< *(array2+i) <<endl;   //i行首地址

cout<< *(*(array+i)+j) <<" " ;   //i行元素值

用指針做爲函數參數:大數據量傳送,傳遞地址,減小開銷

void splitFlot(float x, int *intpart, float *fracpart){

*intpart =  int(x);

*fracpart = x - *intpart;

}

spilt( x, &n, &f );

指針型函數:結束時把大量數據從被調函數返回到主調函數

數據類型 *函數名(參數表){

函數體

}

指向函數指針:用來存放函數代碼首地址的變量

數據類型 ( * 函數指針名 ) ( 形參表 )

void print_stuff ( float f ){};

void ( * function_pointer ) ( float );

function_pointer = print_stuff;

function_pointer( pi );

對象指針

1、對象指針

類名 *對象指針名

對象指針名->成員名

2、指向類的非靜態成員的指針

類型說明符 類名::*指針名  //聲明指向公有數據成員的指針

指針名=&類名::數據成員名;

對象名.*類成員指針名

對象指針名->*類成員指針名

類型說明符 (類名::*指針名)(參數表)    //聲明指向公有函數成員的指針

(對象名.*類成員指針名)(參數表)

(對象指針名->*類成員指針名)(參數表)

Point A(4,5);

Point *p1 = &A;

int ( Point::*p_GetX ) ( ) = &Point :: GetX;

cout << ( A.*p_GetX) () <<endl;

cout<< (p1->GetX)()<<endl;

3、指向類的靜態成員的指針

通過指針訪問類的靜態數據成員

int * count = &Point :: countP;

cout<< * cout <<endl;

通過指針訪問類的靜態函數成員

void (*gc)() = Point ::getC;

gc();


字符串

#include <string>
#include <iostream>
#include <stdlib.h>
using namespace std;

int main(){

    string S1 = "DEF",S2="123";    
    cout<<"S1 is "<<S1<<endl;
    cout<<"S1.lengh() = "<<S1.length()<<endl;
    cout<<"S1.append(\"123\") "<<S1.append("123")<<endl;
    cout<<"S1.compare(\"DEF\") "<<S1.compare("DEF")<<endl;
    cout<<"S1.insert "<<S1.insert(5, "SHENJIE")<<endl;
    cout<<"S1.substring is "<<S1.substr(3,10)<<endl;
    cout<<"S1.find is "<<S1.find("SHEN")<<endl;

    S1 = S2;
    S1+=S2;S1==S2;
    cout<<"S1[4] is "<<S1[4]<<endl;

    char CP1[20];
    char *CP2;

    cin>>CP1;
    CP2 = CP1;
    cout<<CP1<<endl;
    cout<<CP2<<endl;

    static char str[20] = "program\0shenjie";
    cout<<str<<endl;


    system("PAUSE");
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章