new、引用

C++学习笔记1
(1)数组声明使用数组名来标记存储位置;对数组名使用sizeof将得到整个数组的长度;将地址运算符&用于数组名时,将得到整个数组的地址。
(2)恒等公式:

         arr[i]=*(arr+i);
          &arr[i]=arr+i;

将指针加1,相当于将指针移动了指针所指类型相等的长度
(3)使用new和delete来创建动态数组

#include<iostream>
#include<cstring>
using namespace std;
char* getname();
int main(void)
{
   char *name;
   name=getname();
   cout<<name<<" at "<<&name<<endl;
   delete [] name;
   
   name=getname();
   cout<<name<<" at "<<&name<<endl;
   delete [] name;
   system("pause");
   return 0;
}
char* getname()
{
   char temp[100];
   cout<<"Enter last name:";
   cin>>temp;
   char* p=new char[strlen(temp)+1];
   strcpy(p,temp);
   return p;
}

(4)continue语句用于循环中,让程序跳过循环体中余下的代码,直接进行下一次的循环判断;
break语句用将程序跳出switch或for循环,执行他们后面的语句。
(5)C++按值传递数据,函数使用的是数据的副本,但是,接受数组名的函数将使用原始的数据。因此为了防止数组中的值被修改,使用const int arr[]或const int *arr作为函数的参数,如:void fun(const int *arr,int n)
(6)队输入参数进行检查并且避免恶意输入的代码

cin>>temp;
if(!cin)                   //bad input
{
  cin.clear();
while(cin.get()!='\n')  continue;
cout<<"Bad input, input process will terminated.\n";
break;
}

(7) int a=10;

     const int  * pt=&a;   //pt是一个指向整型常量的指针,pt可以             变,但是*pt不能变
          int  * const pt_1=&a;   //pt_1是一个指向整型的常量指针,pt_1不能变,但是*pt_1可以变
         const int * const pt_2=&a;  //pt_2和*pt_2都是常量,不能变

(8)与数组名不同的是,数组名是数组第一个元素的地址,结构名只是结构的名称,要获得结构的地址,必须使用&; 可以将一个结构赋值给另一个结构,但是不能将一个数组赋值给另一个数组
(9)函数名就是函数的地址;函数指针的使用方法示例:

double pam(int i);
double (*pfun)(int);   //pfun points to a function with a int arguement that returns double
pfun=pam;
double y=(*pfun)(4);    //or   double y=pfun(4);

C++自动类型推断:

auto pfun_1=pam;   //C++中,pfun_1的作用等同于pfun

(10)对于 int pa[10];
pa是数组第一个元素的地址,即&pa[0]; 而&pa是整个数组(即十个个int元素块)的地址,数值上他们相等,但是他们的类型不同,一种差别是,pa+1是数组中第二个元素的地址,而&pa+1是数组pa后面第十个元素的地址,另一个差别是,要得到第一个元素的值得操作为:`pa[0]=*pa=**&pa;

引用
(1)引用是已定义的变量的别名(另一种名称)

   int rats;
   int & rods=rats;   //makes rods an alias for rats; rats 和rods指向相同的值和内存单元
  它的主要作用是用作函数的形参,通过将引用变量用作参数,函数将使用原始数据,而不是其副本。
int a,b;
a=10;
b=20;
void cal(int& x,int& y)
{
    x=x*x;
    y=y*y;
}
cal(a,b);

必须在声明引用变量时进行初始化;可以通过初始化来设置引用,但是不能通过赋值来设置;
(2)左值是可被引用的数据对象,例如:变量,数组元素,结构成员,引用和解除引用的指针;在赋值语句中,左边必须是可以修改的左值,即,在赋值表达式中,左边的子表达式必须标识一个可修改的内存块;
(3)

struct stu
{
     std::string name;
    int number;
};
stu& deal(stu& target,const stu& source);
deal(student,student_01)=studeng_02;   //deal 函数的返回值在可修改的内存板块里,所以可以为左值,可以修改。

常规(非引用)函数返回类型是右值,因为这种返回值位于临时内存单元中;
(4)如果数据对象是数组,则只能使用指针;如果数据对象是结构,则使用引用或指针;如果数据对象是类对象,则使用引用;
(5)使用引用结构作为函数的参数时,若结构中有指针成员变量,可以先不初始化,可以在函数中申请空间(new),但是要记得使用完后要delete

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值