1、指针
1.1.动态一维数组的构造
里分组,// DyARR.cpp :动态分配数组 #include "stdio.h" #include "malloc.h" int main(void) { //静态分配数组 int a[5]; int i; //动态分配数组 int len; int * pArr; printf("please enter the length of pArr:"); scanf("%d",&len); pArr=(int *)malloc(len*4); //对动态一维数组进行赋值 for(i=0;i<len;i++) { printf("arr[%d]=",i); scanf("%d",&pArr[i]); } //输出动态数组 for(i=0;i<len;i++) printf("pArr[%d]=%d,",i,pArr[i]); //修改动态内存的大小 realloc(pArr,10); //手动释放动态数组 free(pArr); return 0; }
1.2.静态内存与静态内存的比较
1.静态内存由系统自动分配、释放,动态内存由程序员手动分配、手动释放
2.静态内存是在栈分配、动态内存在堆中分配,所以动态内存可以跨函数使用
pst->age代表指针所指向的结构体变量的age这个成员。
1.3.多级指针
#include <stdio.h> int main(voiid) { int i=10; int * p=&i;//int *数据类型的p指针变量存放int类型的i变量的地址; int ** q=&p;//int **类型的指针变量q存放int *类型的p变量的地址 int *** r=&q; printf("i=%d\n",***r);//***r就是i变量的值 return 0; } clued<stdio.h> void f(int ** q) { //*q就是p } void g() { int i=1; int * p=&i; f(&p); } int main(void) { g(); retrurn 0; }
2、结构体
2.1.为什么需要结构体
与java中类的思想类似,比如一个班同学各类学籍信息,可以捆绑在一起,成为一个新的数据类型。
2.2如何定义一个结构体
//1.推荐 struct Student { int age; float score; char sex; }; //2.不推荐 struct Student { int age; float score; char sex; }st2; //3.不推荐 struct { int age; float score; char sex; }st3;
2.3.结构体的赋值和初始化
//1.定义时整体赋值 struct Student st={18,66.5,'M'}; //2.先定义,后单独赋值 struct Student st2; st2.age=19; st2.score=90.5; st2.sex='F';
2.4.如何取出结构体变量中的每一个变量
//1. st2.age=19; //2. struct Student *pst=&st2; pst->score=85.6;