數組
初始化在聲明數組時給部分或全部元素賦初值
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類型的指針變量
int *p = 0; 不指向任何地址void *pv;
pv = &i;
int *pint;
pint = (int *) pv;
指針特別適合處理存儲在一段連續內存空間中的同類數據
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");
}