结构体初阶

复制代码
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//int main()
//{
//    //指针+指针?NO!
//    // 日期+/-天数
//    // 日期-日期
//    //    日期+日期?没什么用
//    //
//    return 0;
//}
 
//int main()
//{
//#define N_VALUES 5
//    //指针的关系运算
//    //for (vp = &values[N_VALUES]; vp > &values[0];)
//    //{
//    //    *--vp = 0;
//    //}
//
//    //for (vp = &values[N_VALUES-1]; vp >= &values[0];vp--)
//    //{
//    //    *vp = 0;
//    //}//最后vp停在了-1的内存位置//实际在绝大多数的编译器上是可以顺利完成任务的,然而我们还是要避免这样写,因为标准并不保证他可行
//    //标准规定:允许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针比较,但不允许与指向第一个元素之前的那个内存位置的指针进行比较
//    return 0;
//}
 
//int main()
//{
//    int arr[10] = { 0 };
//    arr;//数组名是数组首元素的地址
//    printf("%p\n", arr);//008CFA70
//    printf("%p\n", &arr[0]);//008CFA70
//    return 0;
//}
 
//int main()
//{
//    int arr[10] = { 0 };
//    int* p = arr;
//    int i = 0;
//    for (i = 0; i < 10; i++)
//    {
//        printf("%p <==> %p\n", &arr[i], p + i);//p为首元素地址,p+i产生的就是下标为i的元素的地址
//         // 0034FDE8 <= = > 0034FDE8
//        //    0034FDEC <= = > 0034FDEC
//        //    0034FDF0 <= = > 0034FDF0
//        //    0034FDF4 <= = > 0034FDF4
//        //    0034FDF8 <= = > 0034FDF8
//        //    0034FDFC <= = > 0034FDFC
//        //    0034FE00 <= = > 0034FE00
//        //    0034FE04 <= = > 0034FE04
//        //    0034FE08 <= = > 0034FE08
//        //    0034FE0C <= = > 0034FE0C
//
//    }
//
//    for (i = 0; i < 10; i++)
//    {
//        *(p + i) = i;
//        printf("%p\n", *(p + i));
//         // 00000000
//         // 00000001
//        //    00000002
//        //    00000003
//        //    00000004
//        //    00000005
//        //    00000006
//        //    00000007
//        //    00000008
//        //    00000009
//    }
//    return 0;
//}
 
//int main()
//{
//    int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//    int* p = arr;
//    //arr[2] <==> *(arr+2)<==> *(p+2) <==> *(2+p) <==> *(2+arr) ==2[arr]
//    //2[arr] <==> *(2+arr)
//    //[]-是一个操作符 2和arr是两个操作数
//    //a+b
//    //b+a
//    printf("%d\n", 2[arr]);
//    printf("%d\n", arr[2]);
//    //arr[2]--> *(arr+2)--> *(2+arr)-->2[arr] 计算机编译时是将arr[2]转化为*(arr+2)运行的
//
//    printf("%d\n", p[2]);//p[2]-->*(p+2)-->*(arr+2)-->arr[2]
//    printf("%d\n", 2[p]);
//    return 0;
//}
 
//int main()
//{
//    int a = 10;
//    int* pa = &a;//pa是指针变量,一级指针
//    //ppa是二级指针变量
//    int* *ppa = &pa;//pa也是变量,&pa取出pa在内存中起始地址
//    //pppa是三级指针变量
//    int** *pppa = &ppa;
//    //套娃...
//    printf("%p\n", pa);//006FF808
//    printf("%p\n", ppa);//006FF7FC
//    printf("%p\n", pppa);//006FF7F0
//    //*pppa=ppa
//    //*ppa=pa
//    //*pa=a
//    //***pppa=a
//
//    return 0;
//}
 
指针数组-数组
//
//int main()
//{
//    int arr[10];//整型数组-存放整型的数组就是整型数组
//    char ch[5];//字符数组-存放的是字符
//    //指针数组-存放指针的数组
//    int* parr[5];//整型指针数组
//    char* carr[5];//字符指针数组
//
//    return 0;
//}
复制代码

 

posted @   morphism  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示