一.学习数据结构之指针和结构体

1.1指针的重要性

内存是可以被CPU直接访问的,硬盘不行主要靠地址总线,数据总线,控制总线
这里写图片描述

具体的总线的解释 来自于博客园 Copyright © zhliao

1.2指针的定义

1.2.1地址:
地址就是内存单元的编号
从0开始的非负整数
范围:0–FFFFFFFF[0-4G-1](地址线是32位,刚好控制2的32次)
1.2.2指针:
指针就是地址 地址就是指针
指针变量是存放内存单元地址的变量
指针的本质是一个操作受限的非负整数(不能加乘除,只能减)

int * p;//p表示指针变量名,int*表示p变量只能是存放int类型的变量的地址
int i=6;
p=&i;//p指向i
*p=10;//含义:*p就等价于i

注意:1.指针变量也是变量,只不过它存放的不能是内存单元的内容,只能存放内存单元地址的内容
2.所有的指针变量只占4个字节,用第一个字节的地址表示整个变量的地址

1.3指针与数组

数组名是存放了第一个数组的第一个字节的地址
代码如下

#include<stdio.h>
int main(void)
{
    double * p;
    double x = 44.3;
    p = &x;//x占了8个字节 1个字节是8位 一个字节代表一个地址
    double arr[3] = { 1.1,1.2,1.3 };
    double *q;
    q = &arr[0];
    printf("%p\n", q);//%p是十六进制输出
    p = &arr[1];
    printf("%p\n", p);
    return 0;
}

讲解:
这里写图片描述
输出结果:
这里写图片描述
解释原因(q和p相差8位):
这里写图片描述
总结:
这里写图片描述

1.4结构体

1.4.1.结构的出现的目的:为了表示一些复杂的数据,而普通的基本类型变量无法满足要求
1.4.2结构体的定义:结构体是用户根据实际需要自己定义的复合数据类型
1.4.3使用结构体

#include<stdio.h>
#include<string.h>

struct Student
{ 
    int sid;
    int sage;
    char name[200];
};
void SetValue(struct Student *pst);
int main(void)
{
    //-------------第一种方法赋值----------------
    /*struct Student st = {34,34,"ll"};
    strcpy_s(st.name, "yanlei");
    st.sage = 20;
    st.sid = 12;
    printf("%s %d %d\n", st.name, st.sage, st.sid);*/
    //-------------第二种方法赋值----------------
    /*struct Student st;//分配了内存空间,只是得到的是一个垃圾数据,随机的  
    struct Student *pst = &st;
    strcpy_s(pst->name, "yanglei");
    pst->sage = 88;
    pst->sid = 77;
    printf("%s %d %d\n", st.name, st.sage, st.sid);*/
    //--------------函数进行赋值-----------------
    struct Student st;
    SetValue(&st);
    return 0;
}
void SetValue(struct Student *pst)
{
    strcpy_s(pst->name, "yanglei");
    pst->sage = 22;
    pst->sid = 111;
    printf("%s %d %d\n", pst->name, pst->sage, pst->sid);
}

总结

注意事项:
结构体变量不能加减乘除,但可以相互赋值
普通结构体变量和结构体指针变量作为函数参数的传递

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值