数组
初始化在声明数组时给部分或全部元素赋初值
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");
}