a[x][y]==*(*(a+x)+y)
int age = 20;
const int* ptr = &age;
int* const ptr = &age;
int sum(int(*ptr)[y],int size) ==int sum(int ptr[][y],int size)
对于数组而言,标识数组结尾的参数将是指向最后一个元素的后面的指针
使用new创建数组并分配内存时,释放数组使用 delete [] xx
int* psome = new int[10];创建
delete [] psome;释放
结构名只是结构的名称,要想获得结构的地址,需要用&
由于形参是指针而并非是结构,所以使用间接成员操作符而非成员操作符;
process (think) 将think函数的地址作为参数进行传递
process(think()) 将think的返回值作为参数进行传递
传递结构的地址
1 #include<iostream> 2 #include<cmath> 3 using namespace std; 4 5 6 struct rect 7 { 8 double x; 9 double y; 10 11 }; 12 13 struct polar 14 { 15 double distance; 16 double angle; 17 }; 18 19 void rect_to_polar(const rect* ttq, polar* nnq); 20 void show_polar(const polar*nnq); 21 22 23 int main() 24 { 25 rect tt; 26 polar nn; 27 cout << "请输入你的数字: " <<endl; 28 29 while(cin >>tt.x>>tt.y) 30 { 31 rect_to_polar(&tt,&nn); 32 show_polar(&nn); 33 cout << "Next two numbers( s to quit): " <<endl; 34 35 } 36 //cout << "Done!"<<endl; 37 system("pause"); 38 return 0; 39 40 41 } 42 43 44 void rect_to_polar(const rect* ttq,polar* nnq) 45 { 46 nnq->distance = sqrt(ttq->x*ttq->x + ttq->y*ttq->y); 47 nnq->angle = atan2(ttq->y,ttq->x); 48 49 } 50 51 52 void show_polar(const polar*nnq) 53 { 54 const double rad_to_deg = 57.2957; 55 cout << "distance = " << nnq->distance; 56 cout << "angle = " <<nnq->angle*rad_to_deg; 57 cout << "degrees\n"; 58 }
函数指针
(*func)() #就是对函数func的调用
详细见:http://blog.csdn.net/windyblankboy/article/details/52264475
第八章--函数探幽
1.内联函数 inline
inline double func(double x){return x*x}
2.创建引用变量 &
int a;
int & ab = a; //把ab作为a的别名 int& 是指向int的引用;
3.引用和指针的最大的差别就是 引用在声明的时候你需要进行初始化赋值,而指针则可以先声明再赋值;
因此引用更加接近于const指针,在创建的时候就必须要进行初始化。
4.按值传递是使用的拷贝不会影响原始数据,而按引用传递使用的是变量本身。
5.要是想既使用引用又不在使用的过程中对原始数据进行修改的话,可以再在函数原型和函数头中使用const。
6.左值参数:可被引用的数据对象;(变量、数组元素、结构成员、引用和被解除引用的指针)
7.应该尽量使用const
8.由于CPU访问寄存器中的值速度要比访问堆栈中内存块的速度要快,
要使用寄存器变量,请在类型声明之前使用关键字register,说明该变量使用的频率很高。
register int count;
9.如果变量被存储在寄存器中,理论上是没有地址的(在C语言中),但若在C++中执行用&获取地址,可以获取,但register对变量的作用将消失。
由于register变量被存储在寄存器中,执行速度增强,因此register号称“”最快的关键字“”
10.外链接性:可以在程序的其他文件中使用它,自始至终都存在
要创建外链接性的静态持续变量,则要在代码块的外部声明;
要创建内链接性的静态持续变量,则要在代码块的外部声明,且要加上关键字 static;
要创建无链接性的静态持续性变量,则要在代码块的里面声明;
11.静态变量声明时没有初始化,所有位置0;
12.在使用作用域解析操作符(::)时,表示将使用变量的全局表示;
13.具有外部链接性的变量,在其他的文件中使用该变量的时候,需要用extern关键字进行声明;如果没有进行声明,则不能够在其他的文件中使用该外部声明;
14.strcpy(str1,str2);//将str2里面的字符串复制到str1中;
strcpy(str1,str2,n);//将str2复制n个字符到str1中;
15.const关键字声明的外部变量的链接性是内部的,只能在文件中使用;
例如:
#include<iostream>;
using namespace std;
const int finger = 10; //链接性为内部
16.若要希望finger变量的链接性是在外部的话,则可以使用如下extern形式:
例如:
#include<iostream>;
using namespace std;
extern const int finger = 10; //链接性为外部
17.mutable 指出,即使结构的变量为const,起某个成员也可以在使用mutable关键字的情况下进行修改;
例如:
struct data
{
int number;
mutable char name[30];
};
const data veep = {0,"hello"};
strcpy(veep.name,"world"); //const限定,不允许修改;
veep.name++; //使用了mutable关键字,可以修改;
18.在默认的情况下,函数的链接性是外部的,即可以在文件之间进行共享;
a.可以使用extern来指明函数是在另一个文件中定义的;
b.可以使用static来指定链接性为内部,只能在定义的文件下使用,但必须同时在函数原型和定义中使用static关键字;
19. 布局操作符new 指定变量的存储位置
例如:
char bud[220];
char* ptr = new (bud) char[10];//指定在bud中存储新建的ptr数组
20.在默认的情况下,名称空间中声明的名称的链接性为外部的(除非它引用了常量);
21.
模板函数:
template <class Any>
void Any(Any & , Any &) ;
显式实例化:
例如:
template void func<int>(int , int)
显式具体化:
例如:
template<>void func(int&,int&)
template<>void func<int>(int&,int&)