会飞的蝌蚪君

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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&)



 

 

posted on 2018-03-15 18:00  会飞的蝌蚪  阅读(130)  评论(0编辑  收藏  举报