1、先说二维,可以这么理解:
十年的大厂网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。成都营销网站建设的优势是能够根据用户设备显示端的尺寸不同,自动调整大厂建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联从事“大厂网站设计”,“大厂网站推广”以来,每个客户项目都认真落实执行。
int n[3]有3个int
那么,
int m[5][3]有5个int[3]
赋值时:
n[1]=3把3给1号
m[4]={5,9,4}m[4]是个int[3]类型,这么赋值,也就是这么赋值:
m[4]的[0]是5:m[4][0]=5
m[4][1]=9
m[4][2]=4
懂了吗?三维甚至更多维大同小异,比如
int k[4][5][3]有4个int[5][3]
2、例程:
int*** CreateGrid(int m,int n,int t)
{
int*** tt = NULL;
tt = (int***)malloc(sizeof(int)*m);
for(int i=0;im;i++)
{
tt[i] = (int**)malloc(sizeof(int)*n);;
for (int k=0;kn;k++)
{
tt[i][k] = (int*)malloc(sizeof(int)*t);
}
}
return tt;
}
void FreeGrid(int*** tt,int m,int n,int t)
{
if(tt != NULL)
{
for(int i=0;im;i++)
{
for (int j=0;jn;j++)
{
free((tt[i][j]));
}
free(tt[i]);
}
free(tt);
tt = NULL;
}
}
示例代码:
#include stdio.h
#include stdlib.h
int main()
{
//有效部分
int ***p = (int***)malloc(sizeof(int**)*3);
for (int i = 0; i 3; ++i){
p[i] = (int**)malloc(sizeof(int*) * 4);
}
for (int i = 0; i 3; ++i){
for (int j = 0; j 4; ++j){
p[i][j] = (int*)malloc(sizeof(int) * 5);
}
}
//有效部分完
//下面内容为测试
for (int i = 0; i 3; ++i){
for (int j = 0; j 4; ++j){
for (int k = 0; k 5; ++k){
p[i][j][k] = i + j + k;
}
}
}
for (int i = 0; i 3; ++i){
for (int j = 0; j 4; ++j){
for (int k = 0; k 5; ++k){
printf("%d\t", p[i][j][k]);
}
printf("\n");
}
printf("\n");
}
return 0;
}
#includestdio.h
void check(int * * *ppp) {
printf("三维数组Begin:{\n");
printf("{ %d,%d,\n", ppp[0][0][0], ppp[0][0][1]);
printf("%d,%d,%d,%d,\n", ppp[0][1][0], ppp[0][1][1], ppp[0][1][2], ppp[0][1][3]);
printf("%d,%d,%d,%d,%d },\n", ppp[0][2][0], ppp[0][2][1], ppp[0][2][2], ppp[0][2][3], ppp[0][2][4]);
printf("\n");
printf("{ %d,%d,%d,%d,%d,\n", ppp[1][0][0], ppp[1][0][1], ppp[1][0][2], ppp[1][0][3], ppp[1][0][4]);
printf("%d,%d,%d,%d },\n", ppp[1][1][0], ppp[1][1][1], ppp[1][1][2], ppp[1][1][3]);
printf("\n");
printf("{ %d,%d,\n", ppp[2][0][0], ppp[2][0][1]);
printf("%d,%d,%d,\n", ppp[2][1][0], ppp[2][1][1], ppp[2][1][2]);
printf("%d,%d,%d,\n", ppp[2][2][0], ppp[2][2][1], ppp[2][2][2]);
printf("%d },\n", ppp[2][3][0]);
printf("} //三维数组End\n");
}
void main()
{
//一维
int a1[]={1,11};
int a2[]={2,22,222,2222};
int a3[]={3,33,333,3333,33333};
int a4[]={4,44,444,4444,44444};
int a5[]={5,55,555,5555};
int a6[]={6,66};
int a7[]={7,77,777};
int a8[]={8,88,888};
int a9[]={9};
//二维
int * b1[]={a1,a2,a3};
int * b2[]={a4,a5};
int * b3[]={a6,a7,a8,a9};
//三维
int ** a[] = {b1,b2,b3};
check(a);
}
void fun(a,10) 将数组a的首地址赋给指针s
{
int i; i 计的是这数组中有几个字母
for (;*s;s++) 每循环一次,s后移一位,判断结束循环的条件s指向的内容为" \0 "
{
if(*s='a'*s='z'||*s='A'*s='Z')
i++;
}
三维数组可以按一维排列。
下面是完整程序和调用例子:
#include stdio.h
#include time.h
void rr(int *a, int n){
int i;
for (i=0;in;i++) a[i]=rand();
}
main( ){
int a[2][3][4];
int i,j,k;
srand(time(NULL)); //种子
rr(a[0][0][0],2*3*4); //调用
for (k=0;k2;k++){
for (j=0;j3;j++){
for (i=0;i4;i++)printf("%d ",a[k][j][i]); //输出
printf("\n");
}
printf("\n");
}
return 0;
}
最简单的做法是在结构体里存函数指针,然后初始化结构体的时候将函数的地址赋值给它。
复杂一点的,就得按照c++的多态原理,用虚函数表(其实就是能记录函数名对应的函数地址就好)记录每种结构体的成员函数地址,然后每个结构体里多存一个虚函数表的地址。。。然后调用函数的时候查到函数地址强转成函数类型然后调用。。。这个可以自己研究一下c++的虚函数表机制。