1,使用6级指针访问一个整数,使用隐式内存分配中转
#include <stdio.h> #include <stdlib.h> //构建六级指针访问一个整数 //使用隐式内存分配中转 //这个程序只是做人工分配内存的目的 int main(void) { int ******p=NULL; int a=16; p=malloc(sizeof(int *****));//同下 *p=malloc(sizeof(int ****));//同下 **p=malloc(sizeof(int ***));//同下 ***p=malloc(sizeof(int **));//同下 ****p=malloc(sizeof(int *));//开辟空间存放*****p的地址内含关系 //****p=&*****p *****p=&a; printf("a=%d,******p=%d ",a,******p); free(****p); free(***p); free(**p); free(*p); free(p); return 0; }
结果:
a=16,******p=16
1-2,
#include <stdio.h> #include <stdlib.h> int main(void) { int ******p6=NULL; int a=16; p=malloc(sizeof(void*)*5);//五个一维空指针型变量空间 int i; for(i=0;i<5;i++) p[i]=(void*)&p[i+1];//前面的储存后面的地址,层层指向 //建立指针指向关系 p[4]=(void*)&a;//p[4]所存的地址重新赋值 printf("a=%d,******p=%d ",a,******p); free[p]; return 0; }
结果都一样。
2,约瑟夫环
#include <stdio.h> #include <stdlib.h> //约瑟夫环:m个人,以n做作为起始循环的间隔。 // char **alloc_mem(int row,int col) { char **p=NULL; p=malloc(row*sizeof(char *));//分配行空间 if(NULL==p) goto err0;//开辟空间失败直接退出函数,返回空 int i,j; for(i=0;i<row;i++)//分配列空间 { *(p+i)=malloc(col*sizeof(char)); if(NULL==p[i]) goto err1; } return p; err1: for(j=0;j<i;j++)//清k函数 free(p[j]); free(p); err0: return NULL; } void rand_name(char **p,int row,int col) { int i,j; for(i=0;i<row;i++) { p[i][0]=(rand()%26+'A');//首字母大写 for(j=1;j<col-1;j++) { p[i][j]=(rand()%26+'a');//其余都小写 } p[i][j]='