C语言学习笔记3

指针:指针存放值地址,通过指针找到值
空指针:当创建好的指针,使用后的指针及时初始化成 空指针
指针类型的意义:
1.指针类型决定了解引用后能操纵的字节个数  字符指针解引用能操纵1个字符字节,整型指针解引用能操纵1个整型4个字节
//    int a = 0x11223344;//a存十六进制数0x四个字节16进制数
//    //int* pa = &a;当指针类型和值类型相同
//    //*pa = 0;     改变是对a所占的所有字节作用
//    char* pa = &a;//当指针类型和值类型不同
//    *pa = 0;     //改变只是对a所占字节中一个作用
2.指针类型决定了+1移动几个字节  字符指针p+1移动1个字节,整形指针p+1移动4个字节
指针运算:指针加减整数(注意指针类型决定加减移动的是几个字节)=指向内存空间的变化 。指针减指针=之内存储的地址差值=之间相差的字节数,也就是之间相差的内存空间数(加一个内存空间就等于加了一个字节,一个内存空间存一个字节)。
数组指针可以后越界 比如一共5个元素,索引最大为4,可以有p=&arr[5]的情况,不能前越界,不能有p=&arr[-1]的情况
二级指针,存指针地址的指针pp为二级指针,找到一级指针对应值要两个解引用**
//    int a = 1;
//    int* pa = &a;
//    int** ppa = &pa;//存指针地址的指针pp为二级指针
//    **ppa = 0;//a=0
指针数组:数组中每个元素都是一个地址,用索引找元素arr[0]就是用指针,创建指针数组:int*/char* arr[]={&a,&b,...}
//    int c = 2;
//    int* arr[3] = { &a,&b,&c };
//    printf("%d", *arr[2]);//2  找到索引为2的元素&c,并解引用成c的值2
结构体类型里可以包含元素,数组,指针,结构体类型变量
//struct SubS
//{
//    float number;//对齐数是4 存在偏移量0-3的位置
//    char arr[20];//对齐数是1 存在1的倍数偏移量4-23的位置
//    int* p;//对齐数是8 存在8的倍数偏移量24-31的位置
//    struct Student b;//假设struct Student结构的最大对齐数是8,则它的对齐数就是8 存在8的倍数偏移量32-39,最后再补足成 成员中最大对齐数8的整数倍,就是说sizeof(struct SubS)=40个字节
//};
//struct SubS c = { 1.2,"HELLO",NULL,{"WORLD",0,"123123","女"} };//结构体变量c初始化用{},那结构体变量元素中套结构体变量b初始化也得用{}
定义的结构体占的字节数
各成员的存放规则:在零偏移处开始存放第一个成员。从第二个成员起,在各成员对齐数的整数倍的偏移量处开始存放各成员,最后总字节数还要补足成 成员中最大对齐数的整数倍。
各成员的对齐数:其他类型对齐数固定等于其类型所占字节数(用sizeof可算 int*-8 char*-8 char-1 int-4 double-8 float-4 ),结构体类型对齐数不固定等于结构体的最大对齐数。
函数如果传的实参是传值:传结构体类型变量,那就要用结构体类型变量的形参接收,找到变量对应属性还是用点。
函数如果传的实参是传址:传结构体类型变量取地址,那就要用结构体类型指针的形参接收,找到变量对应属性要么指针解引用加点,要么用指针加箭头。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值