指针数组
指针数组,看最后两个字,数组
指针数组是一个数组,不过这个数组优点特别,它的里面存放的是地址。
它的声明方式如下
int *a[10]
数组指针
数组指针,看最后两个字,指针
数组指针是一个指针,这个指针指向的是一个数组。数组指针也称行指针。
声明方式:
int (*p)[10];//该语句是定义一个数组指针,指向含10个元素的一维数组
动态数组定义
数组的大小在编译时可能还是未知的,他们随着函数调用的变化而变化,因此,对这些数组只能进行动态存储分配。
一维动态数组定义
例如,一个长度为n的一维浮点数数组可以按如下方式来创建
float *x = new float[n];
二维数组定义
要构造这样的二维数组,可以把它看做是由若干行所构成的结构,每一行都是一个能用new来创建的一维数组。指向每一行的指针保存在另外一个一维数组之中。
int **a = new int* [row];
for(int i=0;i<row;i++)
{
a[i] = new int [n];
}
相当于生成一个m*n的二维数组
例子:
#include<iostream>
#include<stdlib.h>
using namespace std;
int main()
{
int row, column,onearr;
cout << "请输入二维数组的行数与列数,并以空格隔开:" << endl;
cin >> row >> column;
cout << "请输入一维数组的列数" << endl;
cin >> onearr;
//申请空间
int **a = new int*[row];
for (int i = 0; i < row; i++)
{
a[i] = new int [column];
}
//使用空间
for (int j = 0; j < row; j++)
{
for (int k = 0; k < column; k++)
{
a[j][k] = rand() % 100;
}
}
//遍历空间
for (int j = 0; j < row; j++)
{
cout << endl;
for (int k = 0; k < column; k++)
{
cout << a[j][k] << " ";
}
}
cout << endl;
//一维动态数组
int *d = new int[onearr];
for (int i = 0; i < onearr; i++)
{
d[i] = rand() % 100;
}
for (int i = 0; i < onearr; i++)
{
cout << d[i] << endl;
}
//释放内存
for (int i = 0; i < row; i++)
{
delete[]a[i];
}
delete []d;//一维数组内存释放
//for (int i = 0; i < onearr; i++)
//{
// delete[]d;
//}
a = NULL;
d = NULL;//放置变成野指针
system("pause");
return 0;
}