一、在C语言中指针的定义
符号
| 功能
| 定义方法与使用
| *
| 定义指针类型
| int *p; //定义P是一个指向int类型的指针
//可以理解*p是一个int类型变量
| *
| 取内容运算符
| int a; //定义a是一个int类型变量
int *p; //定义P是一个指向int类型的指针
a=*p; //取p地址指向的变量赋予a
| &
| 地址运算符
| int a; //定义a是一个int类型变量
int *p; //定义P是一个指向int类型的指针
p=&a; //取a变量的地址指向的变量赋予指针p
Print(*p); //打印P所指的数据
| &
| 对于参数为地址
| void f(int &b); //对于b为指针参数
{
Print(*b); //打印b所指的数据
}
int a; //定义a为int类型
f(&a); //把a的地址传给函数的b
|
二、在MQL5中关于指针的使用
*指的指的是一个对象描述符,与C语言不同
MyObject* hobject= new MyObject();
|
| 普通变量
| void OnStart()
{
int a;
a=10;
Print(a); //输出a:10
f(a);
Print(a); //输出a;100
}
//+------------------------------------------------------------+
void f(int &b)//b其实是a的地址
{
b=100; //其实是改变a
}
输出:
10
100
| 普通变量数组
| void OnStart()
{
int a[];
Print(ArraySize(a));
f(a);
Print(ArraySize(a));
Print("a[0]=",a[0]);
}
//------------------------------------------------------------
void f(int& p[])
{
ArrayResize(p,32);
p[0]=123;
}
输出:
0
32
a[0]=123
数组参数的一般使用方法:
void OnStart()
{
double some_array[4]={0.3, 1.4, 2.5, 3.6};
double a=linfunc(some_array);
//...
}
double linfunc(double x[])
{
return (x[0] + 1);
}
| 普通对象
| class Test
{
public:
int i;
};
//+--------------------------------------------------------+
void OnStart()
{
Test *a;
a=new Test;
a.i=10;
Print(a.i);
f(a);
Print(a.i);
delete(a);
}
//+--------------------------------------------------------+
void f(Test *b)
{
b.i=20;
}
输出:
10
20
| 对象数组
| class Test
{
public:
int i;
};
//------------------------------------------------------------
void OnStart()
{
Test a[];
ArrayResize(a,1); //分配空间
Print(ArraySize(a));//输出空间大小:1
f(a);
Print(ArraySize(a));//输出空间大小:2
}
//------------------------------------------------------------
void f(Test& b[])
{
ArrayResize(b,2); //分配空间
}
输出:
1
2
|
声明:以上内容来源于网络,如有侵权请联系我们(123@shiyan.com)删除! |