C++ [ 数组,指针,字符串 ]
2011-09-26 16:54
232 查看
数组
初始化在声明数组时给部分或全部元素赋初值
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");
}
初始化在声明数组时给部分或全部元素赋初值
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");
}
相关文章推荐
- C/C++基础知识总结——数组、指针域、字符串
- C++中的字符串指针和字符数组
- 从C++指针定义字符串和数组定义字符串区别到C++堆和栈区别
- C++基础概念-数组、指针和字符串
- C++复习5.指针数组字符串
- c++ 指针值和指针地址的输出&指针和数组保存字符串的区别
- 《高质量程序设计指南——C/C++》第7章 C/C++指针、数组和字符串
- C++语法笔记 – 数组 指针与字符串
- C++第八周mooc在线测评—第8周 按址操作(2)——指针与数组、字符串、结构体,动态数组
- C/C++字符串,字符数组,字符指针及其相互静态拷贝与追加的安全问题解决方案(2)
- C++基础教程 学习笔记(二) 数组、字符串和指针
- C++中字符串以及数组和指针的互相使用讲解
- C_PlusPlus学习笔记 - 5_数组、指针和字符串 (C++语言程序设计【第三版】 郑莉等,清华大学出版社)
- 【C++学习笔记】数组和指针再C-风格字符串的演示
- C++利用指针数组和快排对输入的字符串进行排序
- C++指针和数组:字符和字符串、字符数组
- C/C++——声明一个到字符的指针,包含10个整数的数组,到包含10个整数的数组的引用,到字符串的数组的指针,到字符的指针的指针...
- c++字符串数组与字符串指针 c++ primer plus chapter 7 复习题8 的一点小问题
- C++ 字符数组和字符指针和字符串
- C++_读入很多行字符串到字符串指针数组、或者到字符串数组中