1.
int a[5] = {1,2,3,4,5};
int *p = (int *)(&a+1) ; // &a是数组指针 其类型为int(*)[5] 指针加1之后增加的是5*sizeof(int)实际就是a[5]
//此时输出的 *(p-1)=5;
2.将“引用”作为函数参数有哪些特点?
传递引用给函数与传递指针的效果是一样的,被调函数的形参就成为原来主函数的中的实参变量或对象的一个别名来使用,所以在被调函数中形参变量的操作就是对其相应的目标对象(在主调函数中)的操作。使用引用传递函数的参数,在内存中并未有产生实参的副本,如果传递的是对象,还将调用拷贝构造函数,因此,当参数传递数据较大时,用引用比用一般变量传递参数的效率和所占空间都好,使用指针作为函数的参数虽然也能达到引用的效果,但是,再被调函数中同样要给形参分配存储单元,且需要重复使用“*指针变量名”的形式进行运算,这很容易产生错误且程序的阅读性较差,另外一个方面,在主调函数的调用处,必须使用变量的地址作为实参,而引用更容易使用,更清晰。
3.静态变量、数据成员、方法
函数内的局部非静态变量会随着函数体的消亡而被销毁,用static关键词将转化为静态局部变量不会随着函数的退出而释放空间
静态数据成员是先于类的声明之前存在与内存中,而非静态数据成员是在类创建了实例对象而分配内存的。对于每个非静态数据成员每个类对象都有自己的拷贝,而对于静态数据成员对于每个类对象只有一个拷贝,它是在全局数据区分配内存,属于本类所有对象的共享数据成员,不属于特定类的对象的数据成员。
静态方法只能访问静态成员(成员变量和成员方法),非静态方法可以访问静态也可以访问非静态的
4.c++中,定义的结构体类型struct是能包含成员函数、能继承、能实现多态,和class的区别在于,class能写类模板,struct没有。 默认继承访问权限的区别,struct是public,class是private。
5.指针变量是保存一个变量地址的变量,它里面保存着一个特殊的东西:地址,即内存单元。一个内存单元要用32个状态来表示(即32个0或1),一个0或1占用一个位,8个位就是一个字节。即在32位的机器中占用32/8=4个字节空间(注在32位机器上指针不管指向char、int、double类型的变量时它所占的字节都是4个字节)。