c++:数组,指针以及字符串的知识要点

数组

  1. 数组的定义:数组是具有一定顺序关系的若干对象的集合体,组成数组的对象为该数组的元素。
  2. 每个元素有n个下标的数组称为n维数组
  • 数组的声明和使用
  1. 数组的声明:a.确定数组的名称 b.确定数组元素的类型 c. 确定数组的结构(包括数组维数,每一维数的大小)
  2. 数组的使用:注意点为:a.数组元素的下标表达式可以是算数表达式,结果必须为整数 b.数组元素的下标不能越界
  3. 数组作为函数的参数使用
    例子参考如下
#include<iostream>
using namespace std;
void rowSum(int a[][4],int nRow)//定义函数rowSum,数组a作为函数的参数 
{
	 for(int i=0;i<nRow;i++)
	  { 
	     for(int j=0;j<4;j++)
	     { 
	      a[i][0]+=a[i][j];// 计算二维数组a每行元素值之和,
	     }
	 }	
 }
 int main()
 {
 	 int table[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
 	 for(int i=0;i<3;i++)
 	    for(int j=0;j<4;j++)
 	      cout<<table[i][j];//输出table二维数组
	 rowSum(table,3);//调用函数 
	 for(i=0;i<3;i++)
	  cout<<"Sum of row "<<"is "<<table[i][0]<<endl; 
  } 

指针

  • 指针变量的声明
  • 指针变量是用于存放内存单元地址的。
    2. 声明指针的语法形式是: 数据类型 * 标识符;
  • 与地址有关的运算 “*”和“&”
    1. “*“”符号是取指针变量的值,“&“是取指针变量的地址,
    2. 指针变量的赋值,情况a.如果是赋给一个简单的变量为(int型,double型,float型)通常有 int *p=&b;(指针变量的赋值操作) ,情况b.,如果是赋给一个数组或者字符串,则为 int a[10], int *ptr=a;
      数组名实际上就是一个不能被赋值的指针,即为指针常量
  • 指针类型注意点
    1. 可以声明指向常量的指针,此时不能通过指针来改变所指向对象的值,但指针本身可以改变,可以指向其他的对象

int a;
const int *p1=&a //p1是指向常量的指针
int b;
p1=&b //正确,p1本身的值可以改变(变量的值可以改变)
*p1=1;//错误,不能通过平改变所指向的对象

2. 可以声明指针类型的常量,这时候指针本身的值不能被改变

int *const p2=&a ;
p2=&b ;错误,p2是指针常量,值不能改变

  1. void类型指针,可以存储任何类型的对象地址,就是说任何类型的指针都可以复制给void 类型的指针变量,经过任何类型显示转换,通过void 类型的指针便可以访问任何类型的数据`
#include<isotream>
using namespace std;
int main ()
{
	//void voidObject;//错误,不能声明void类型的变量 
	void *pv; //对,可以声明 void 类型的指针 
	int i=5;
	pv=&i;
	int *pint =static_cast<int *>(pv); // void 类型指针指向整形变量 
	cout<<"* pint="<<* pint<<endl;
	return 0;
}//输出的结果是 :*pint=5; 
// void 指针一般只在指针所指向的数据类型不确定的时候使用 
  • 用指针处理数组元素
    1. 直接用代码作为例子比较明显
      如:设有一个int 型数组 a,有 10个元素 ,用3 种方法输出这个数组
      方法一:
#include<isotream>
using namespace std;
int main()
{
	int a[10]={1,3,4,6,22,12,23,45,67,81};
	for(int i=0;i<10;i++)
	 cout<<a[i]<<"  ";
	 return 0; 
 } //使用数组名和下标 
 

方法二:

#include<isotream>
 using namespace std;
 int main()
 {
 	int a[10]={1,3,4,6,22,12,23,45,67,81};
 	for(i=0;i<10;i++)
	  cout<<*(a+i)<<"  "; 
 	cout<<endl;
 	return 0;
 }
 //使用数组名和指针运算 

方法三:

 #include<iostream>
 using namespace std;
 int main()
 {
 	int a[10]={1,3,4,5,22,12,23,45,67,81};
 	for(int *p=a;p<(a+10);p++)
 	cout<<*p<<"  ";
	 cout<<endl;
	 return 0; 
 }
 //通过指针变量 
  • 用指针作为函数参数

#include
using namespace std;
//将实数x 分成整数部分和 小数部分
void splitFloat(flat x,int *intPart ,float * fracPart
{
*intPart=static_cast(x);//取x 的整数部分
*fracPart=x-*intPart;//取 x 的小数部分
}

  • 动态内存分配
    在c++中动态内存的申请为 new,释放为 delete,在c中动态内存的申请为 malloc ,释放为 free
    动态创建对象如下:
 #include<iostream>
 using namespace std;
 class Point
 {
 	public:
 		  Point ():x(0),y(0)
		    {
		   	  cout<<"Default Constructor called."<<endl;
			} 
		  Point (int x,int y):x(x),y(y)//构造函数 
	        { 
		   	  cout<<"Constructor called."<<endl; 
		    }
		  ~Point()//析构函数 
		    {
			  cout<<"Destructor called."<<endl; 
		    } 
		   int getX() const // 常成员函数,const 可以放在后面也可以放在前面 
		    {
		       return x;
	        }
	       int getY() const
		    {
		       return y;
		    }
		   void move(int newX,int newY)
		    {
		 	   x=newX;
		 	   y=newY;
		    }//move成员函数的初始化
    private:
	  int x,y; 
 };
 int main()
 {
 	cout<<"Step one:"<<endl;
 	Point *ptr1=new Point;//动态创建对象,没有给出参数列表,因此调用默认构造函数
	 delete ptr1;//创建对象,自动调用析构函数
	 cout<<"Step two :"<<endl;
	 ptr1=new Point(1,2);//动态创建对象,并给出参数列表,因此调用有形参的构造函数
	 delete prt1;//删除对象,自动调用析构函数 
  } 
  • 用vector创建数组对象

    1. 用vector 定义动态数组的形式为 :vector<元素类型>数组对象名(数组数组长度)
      int x=10;
      vector arr(x);
  • 字符串

  1. string 类型,字符串与数组的区别是字符的长度,字符串后面的结尾为’\0’;
  2. c++中字符串的读入方法有
    (cin、cin.get()、cin.getline()、getline()、gets()、getchar()))
    不同方法的输入和输出的数据的长度和类型都是不一样的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值