1、关于数组指针:就是指向数组的指针,有点像二维数组
关于数组指针的声明
关于数组指针的内存分配、释放
关于数组指针的赋值
#include<iostream>
#include<string.h>
using namespace std;
void main()
{
int a = 99;
//声明一个数组指针
int(*p)[5] = NULL;
//给指针分配内存
p = (int(*)[5])malloc(20);
//给数组指针赋值
p[0][0] = a;
cout << p[0][0] << endl;
cout << "p[0][0]的地址: " << &p[0][0] << endl;
cout << "p[0]的地址: " << &p[0] << endl;
cout << "p[1]的地址: " << &p[1] << endl;
free(p);
system("pause");
return;
}
结果
可以看出p[0]与p[1]间相差20个字节
2、指针数组,就是有一组相同类型的指针组成的数组
指针数组的声明、内存分配、赋值方式
#include<iostream>
#include<string.h>
using namespace std;
void main()
{
int a = 99;
//声明一个数组指针
int(*p)[5] = NULL;
int bb[4] = { 11,22,33,44 };
//声明一个指针数组
int *arr[4] = { NULL, NULL, NULL, NULL };
arr[0] = (int*)malloc(20);
arr[1] = (int*)malloc(20);
arr[2] = (int*)malloc(20);
arr[3] = (int*)malloc(20);
cout << arr[0] << endl;//输出的其实是地址
cout << arr[1] << endl;
cout << arr[2] << endl;
cout << arr[3] << endl;
//给指针数组赋值,两种方法:一种是让指针指向一块新的内存
*arr[0] = 99;
*arr[1] = 88;
*arr[2] = 77;
*arr[3] = 66;
cout << arr[0] << ": " << *arr[0] << endl;
cout << arr[1] << ": " << *arr[1] << endl;
cout << arr[2] << ": " << *arr[2] << endl;
cout << arr[3] << ": " << *arr[3] << endl;
free(arr[0]);
free(arr[1]);
free(arr[2]);
free(arr[3]);
//一种是往内存上面赋值,
arr[0] = &bb[0];
arr[1] = &bb[1];
arr[2] = &bb[2];
arr[3] = &bb[3];
cout << arr[0] << ": " << *arr[0] << endl;
cout << arr[1] << ": " << *arr[1] << endl;
cout << arr[2] << ": " << *arr[2] << endl;
cout << arr[3] << ": " << *arr[3] << endl;
//给指针分配内存
p = (int(*)[5])malloc(20);
//给数组指针赋值
p[0][0] = a;
cout << p[0][0] << endl;
cout << "p[0][0]的地址: " << &p[0][0] << endl;
cout << "p[0]的地址: " << &p[0] << endl;
cout << "p[1]的地址: " << &p[1] << endl;
free(p);
system("pause");
return;
}
3、指针函数:返回值是指针的函数
struct Movie
{
char name[20];
int num;
int *data;
};
struct Content
{
int member;
};
#include<iostream>
#include<string.h>
#include"416.h"
using namespace std;
Movie movies[] =
{
{ "Jackson",1,NULL },
{ "Apple",2,NULL },
{ "Jay",3,NULL },
{ "TT",4,NULL },
{ "PGone",5,NULL }
};
Content Fillers[] =
{
{ 111 },
{ 333 },
{ 555 },
{ 777 },
{ 999 },
{ 000 },
{ 222 },
{ 444 },
{ 666 }
};
int *getSum(int num)
{
int sum = 0;
int *p = NULL;
for (int i = 0; i < num; i++)
{
sum += Fillers[i].member;
}
p = ∑
return p;
}
void main()
{
int number = 0;
int *a = NULL;
//声明一个数组指针
int(*p)[5] = NULL;
int bb[4] = { 11,22,33,44 };
//声明一个指针数组
int *arr[4] = { NULL, NULL, NULL, NULL };
arr[0] = (int*)malloc(20);
arr[1] = (int*)malloc(20);
arr[2] = (int*)malloc(20);
arr[3] = (int*)malloc(20);
number = sizeof(Fillers) / sizeof(Content);
a = getSum(number);
cout << "Filler 中所有元素的和: " << *a << endl;
cout << arr[0] << endl;//输出的其实是地址
cout << arr[1] << endl;
cout << arr[2] << endl;
cout << arr[3] << endl;
//给指针数组赋值,两种方法:一种是让指针指向一块新的内存
*arr[0] = 99;
*arr[1] = 88;
*arr[2] = 77;
*arr[3] = 66;
cout << arr[0] << ": " << *arr[0] << endl;
cout << arr[1] << ": " << *arr[1] << endl;
cout << arr[2] << ": " << *arr[2] << endl;
cout << arr[3] << ": " << *arr[3] << endl;
free(arr[0]);
free(arr[1]);
free(arr[2]);
free(arr[3]);
//一种是往内存上面赋值,
arr[0] = &bb[0];
arr[1] = &bb[1];
arr[2] = &bb[2];
arr[3] = &bb[3];
cout << arr[0] << ": " << *arr[0] << endl;
cout << arr[1] << ": " << *arr[1] << endl;
cout << arr[2] << ": " << *arr[2] << endl;
cout << arr[3] << ": " << *arr[3] << endl;
//给指针分配内存
p = (int(*)[5])malloc(20);
//给数组指针赋值
p[0][0] = *a;
cout << p[0][0] << endl;
cout << "p[0][0]的地址: " << &p[0][0] << endl;
cout << "p[0]的地址: " << &p[0] << endl;
cout << "p[1]的地址: " << &p[1] << endl;
free(p);
system("pause");
return;
}