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");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值