C语言ENDING-指针

2019-08-04  本文已影响0人  南在南方i

指针

指针就是地址!!! 存的是地址而不是某个值,因此他的值可以随地址上的值的改变而变化

‘*’

  1. 声明/定义变量时,表示一个指针变量
    float b = 20;
    int c = 10;
    int *a;定义一个指针变量,指向的内存空间只能存放整数
    注意:定义指针变量的时候一定要给初值 不确定就给NULL(否则为野指针)
float *b = NULL;NULL是指向内存的起始地址
int *a = b;不行 指针变量只能存地址 不能存具体值
int *a = &b;不行 整形指针只能存整形数据的地址
int *a = &c;正确

2.除了定义指针变量之外 都是访问某个地址的值

int *temp = &c; 定义指针变量1
*temp = 21; 访问temp地址里面的数据 赋值为21

‘&’

为什么需要指针

解决跨区域(不同作用域 不同代码块/函数)之间的数据交互

数组与指针的关系

通过实例进行解释

//定义一个数组 系统会分配内存空间 可以存值
int num[10] = { };
//定义一个指针变量 只为变量本身分配8个字节内存空间
//无法存值 因为没有为它分配可以存值的内存空间
int *p;

//如果想给指针指向的地区赋值
//1.指针变量已经指向某块区域
int a3 = 10;
int *pA = &a3;
*pA = 30;

//2.指针指向一个数组
int num2[10] = { };
int *pNum = num2;

//3.动态分配内存  malloc realloc free
//上面两种指向的内存都是别人的
//希望分配一个属于自己的内存空间
//自己分配的内存空间必须自己释放
//普通变量的内存是系统自己分配 所以系统自己负责释放
#include <header>//创建头文件
char *pName = malloc(10 * sizeof(char));
//判断分配是否成功
if(pName == NULL){
        //分配失败
        exit(EXIT_FAILURE)
}

        pName[0] = 'j';
        pName[1] = 'a';
        pName[2] = 'c';
        
        printf("%s\n",pName);

        //当之前分配的内存空间不够了 就需要在之前的基础上重新分配
        //realloc 必须是之前使用malloc分配过的
        //如果是系统分配的内存 时不能适用realloc的
        //用完了就要自己释放内存
        pName = realloc(pName,4 * sizeaf(char));
 
        free(pName);

        return 0;

demo文件的操作模式

结构体

是一种数据结构 复合数据类型

struct Person
    {
        char name[10];
        int age;
        char *addr;
    };
int i;
    struct Person xw;
    //xw.name == "小王";//数组一旦定义 地址不能改变
                        //不能直接给数组赋值
    xw.name[0] = 'x';//系统为变量分配内存了
    xw.name[1] = 'w';
    xw.age = 30;

    xw.addr == "西南大学";//常量字符串地址是由系统分配的

    int i1 = 10;
    struct  Person zs = { "张三",20 };

使用结构体可以方便整洁的将许多不同种类的数据融入到一个结构中并且十分方便调用

PS.

人常常会被“解释”束缚住,失去思考的本质

上一篇下一篇

猜你喜欢

热点阅读