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;