指针的初始化
指针可以用0值或在编译时可获得整型const对象的0
const int i=0;
int *p=i; //available
int *p=0; //available
指针只能初始化或赋值为同类型的变量地址或另一指针
double dval;
double *db=&dval;
double *db2=db;
int *i=&dval; //error
指针与引用的比较:
第一引用总是指向某个对象,定义引用时没有初始化时错误的。
第二赋值行为的差异,给引用赋值修改的时该引用所关联的对象的值,而并不是使引用和另外一个对象发生关联,该引用始终指向初始化时的对象。
使用指针访问数组
在表达式中使用数组名时,改名字会自动转换为指向数组第一个元素的指针。
int ia[]={0,2,4,6,8};
int *p=&ia[2];
int i=p[2];
int j=p[-2];
cout<<i<<endl;
cout<<j<<endl;
对于指针形参
该类实参复制给形参,在函数中的任何改变只用于局部副本,如果在被调函数中修改了形参,主调函数中使用的实参的值并没有改变,改变的是实参指针所指向的变量的值。
void reset(int *ret)
{
*ret=10;
ret=0;
}
int main()
{
int i=42;
int *p=&i;
cout<<"i "<<*p<<endl;
reset(p);
cout<<"i "<<i<<endl;
cout<<"i "<<p<<endl;
//cout<<*p<<endl;
int end;
scanf("&d",&end);
return 0;
}
class 和struct的唯一差别
默认情况下,class时private,struct时public
编写自己的头文件ifndef
C++预处理器实在编译之前运行,预处理器用指定的头文件内容替换每个#include
避免多重包含的方法:
#ifndef
SALESITEM_H
#define SALESITEM_H
#endif
数组的位数必须用常量表达式来定义
指:整形字面值常量、枚举常量、常量表达式初始化的const对象。
Int staff_size=27;
Char buffer[staff_size]; //错误
const int staff_size=27;
char buffer[staff_size]; //可行
多维数组
多维数组元素的初始化
int ia[3][4]={{0,1,2,3},{4,5,6,7},{8,9,10,11}};
int ia[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};
上述两种初始化方法相同
int n=99999;
int i,j;
char **data=(char**)new char[7];
for( i=0;i<7;i++)
{
data[i]=new char[10];
itoa(n,data[i],10);
n--;
}
for(j=6;j>=0;j--)
cout<<data[j]<<endl;
for(i=0;i<7;i++)
delete []data[i];