一:一维数组与一级指针
数组名是数组的地址,也是数组首元素的地址。
#include <iostream>
using namespace std;
double average_1(double array[], int count);
double average_2(double* p, int n);
int main(void)
{
//一维数组----------一级指针
double values[] = { 10.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0 };
cout << "Average = "
<< average_1(values, (sizeof values)/(sizeof values[0])) << endl;
cout << endl << "Average = "
<< average_2(values, (sizeof values)/(sizeof values[0])) << endl;
return 0;
}
double average_1(double array[], int count)
{
double sum(0.0);
for(int i = 0; i < count; i++)
sum += array[i];
return sum/count;
}
double average_2(double* p, int n)
{
double sum = 0.0;
for (int i = 0; i < n; i++)
sum += *p++;
// sum += p[i];
return sum/n;
}
二:二维数组与数组指针
#include <iostream>
using namespace std;
double yield(double array[][4], int n);
double yield_2(double (*p)[4], int n);
int main(void)
{
double beans[3][4] = { { 1.0, 2.0, 3.0, 4.0 },
{ 5.0, 6.0, 7.0, 8.0 },
{ 9.0, 10.0, 11.0, 12.0 } };
cout << endl << "Yield = " << yield(beans, sizeof beans/sizeof beans[0])
<< endl;
cout << endl << "Yield_2 = " << yield_2(beans, sizeof beans/sizeof beans[0])
<< endl;
return 0;
}
double yield(double beans[][4], int count)
{
double sum(0.0);
for(int i = 0; i < count; i++)
for(int j = 0; j < 4; j++)
sum += beans[i][j];
return sum;
}
//二维数组与数组指针的关系
double yield_2(double (*p)[4], int n) //double[4]* p
{
double sum = 0.0;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < 4; j++)
{
sum += p[i][j];
}
}
return sum;
}
三:指针数组与二级指针
#include <iostream>
using namespace std;
void yield(char* array[], int n);
void yield_2(char** p, int n);
int main(void)
{
//指针数组,,每一个数组元素是一个指针
char* beans[4] = {"IBM", "Microsoft", "Oracle", "Sun"};
yield(beans, sizeof beans/sizeof beans[0]);
yield_2(beans, sizeof beans/sizeof beans[0]);
return 0;
}
void yield(char* beans[], int n)
{
for (int i = 0; i < n; i++)
cout<<beans[i]<<endl;
cout<<endl;
}
//指针数组与二级指针的关系
void yield_2(char** p, int n)
{
for (int i = 0; i < n; i++)
cout<<p[i]<<endl;
}
四:函数指针
#include <iostream>
using namespace std;
long sum(long a, long b);
long product(long a, long b);
int main(void)
{
//函数指针----指向函数的地址
long (*pdo_it)(long, long);
//函数名初始化指针
pdo_it = product;
cout << endl
<< "3*5 = " << pdo_it(3, 5);
pdo_it = sum;
cout << endl
<< "3*(4 + 5) + 6 = "
<< pdo_it(product(3, pdo_it(4, 5)), 6);
cout << endl;
return 0;
}
long product(long a, long b)
{
return a*b;
}
long sum(long a, long b)
{
return a + b;
}
五:返回类型为指针的函数
#include <iostream>
using namespace std;
double* treble(double);
int main(void)
{
double num(5.0);
double* ptr(nullptr);
ptr = treble(num);
cout << endl << "Three times num = " << 3.0*num;
cout << endl << "Result = " << *ptr;
delete ptr; //释放内存
ptr = 0;
cout << endl;
return 0;
}
double* treble(double data)
{
// double result(0.0);
double* result(new double(0.0));
*result = 3.0*data;
return result;
}