茂名企业网站建设开发,南京网站优化工具,天津企业seo,凡科网站可以做seo优化一、几个知识点
内存四区#xff1a;栈、全局#xff08;静态#xff09;#xff0c;常量区#xff0c;除此以外剩余的空间暂时不能随意使用#xff1b;除此以外剩余的空间只要通过malloc函数申请一下#xff0c;就可以使用了#xff1b;申请一个堆上的单个int变量的方…一、几个知识点
内存四区栈、全局静态常量区除此以外剩余的空间暂时不能随意使用除此以外剩余的空间只要通过malloc函数申请一下就可以使用了申请一个堆上的单个int变量的方法int* p (int*)malloc(sizeof(int));申请一个堆上的int数组的方法int* p (int*)malloc(sizeof(int)*5);堆上的地址可以跨函数使用在不需要使用时使用 free 函数释放
二、二级指针
问题引入
char* ss[4] { basic,fortran,C };//每个元素都是char*类型 对于这样的指针数组应该用什么样的指针去遍历呢答案是二级指针 char** p ss; // 二级指针变量p指向一个指针数组
示例1-在栈内和堆上分别定义指针数组
char* ss[] { abc,dd,aaa,NULL };
char* *p (char**)malloc(sizeof(char*) * 4);
int i 0;
while (i 4)
{p[i] ss[i];i;
}
free(p);示例2-二级指针遍历指针数组
#include stdio.h
void main()
{char* p Test;char* ar[4] { basic,fortran,C }; // 一共4个元素每个元素都是char*类型printf(sizeof(ar)%d\n, sizeof(ar));char* *pp ar;int i 0;while (i sizeof(ar) / sizeof(ar[0])){p pp[i];printf(第%d个指针变量指向的内容是%s\n, i, p); //pp[i]的类型是char*i;}printf(p指向的地址是0x%p内存空间上的内容是%s\n, p, p);
}运行结果
示例3
#includestdio.h
void main()
{int ar[10] { 33,55 };int n 10;int* p n; //一级指针变量指向了一个普通变量为了远程操控普通变量存储的数据int* q ar;*p -1;//int* *pp p; //指针变量的指针是二级指针//pp q;//*pp p;//*p或p[0]远程操控一个一级指针变量让它指向到其他地址int* as[10] { ar,n,NULL }; // 每个元素都是一个一级指针变量int* *pp as; // as[0]; // as[0]类型是int*类型int i 0;while (i sizeof(as) / sizeof(as[0])){printf(第%d条指针指向0x%p\n, i, pp[i]); //pp[i]类型是int*类型i;}printf(\n);int ar1[] { 32,56,93,56,-1,0 }; //每个元素都是int类型int* p1 ar1[0]; // ar; // 一级指针变量p, 指向一个普通变量的一维数组while (*p1){printf(p[%d]%d\n, p1 - ar1, *p1);//指针的减法: 相差字节/sizeof(int)逻辑上是几个intp1;}
}