当前位置: 首页 > news >正文

数组和指针复习

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

//int main()
//{
//    int a = 0;
//    int* pa = &a;//pa是指针变量
//    *pa = 20;
//    printf("%d\n", a);
//
//    char ch = 'w';
//    char* pc = &ch;     //指针类型的意义:1.决定了指针+1或-1的操作时,会跳过几个字节
//                        //                2.决定了解引用操作时的权限    
//    
//                        
//    //数组名:
//    //1.数组名在大部分情况下表示:数组首元素的地址
//    //但是有两个例外:下面两种情况数组名表示整个数组
//    // a) sizeof(数组名)
//    // b) &数组名
//    //2.&数组名:取出的是数组的地址
//
//    int arr[10] = { 1,2,3 };
//    int (*parr)[10] = &arr;//parr就是数组指针:指向数组的指针
//
//    return 0;
//}

//函数指针
//函数也是有地址的
//int Add(int x, int y)
//{
//    return x + y;
//}
//
//int main()
//{
//    printf("%p\n", &Add);
//
//    int (*pf)(int, int) = &Add;
//    //函数的地址存放到函数指针变量中
//    //int sum = (*pf)(2, 3);
//    int sum = pf(2, 3);
//    printf("%d\n", sum);
//    
//    return 0;
//}

//函数指针数组:
//int (*pfArr[4])(int, int);
//pfArr数组的每个元素类型是int(*)(int, int)

//函数指针实现回调函数:
//通过函数指针调用的函数就是回调函数

//qsort - 使用冒泡排序的思想,模拟实现了qsort函数
//1.qsort怎么使用
//2.知道qsort怎么使用回调函数实现的通用排序


//
//数组名的理解
//指针的运算和指针类型的意义
//
int main()
{
    int a[] = { 1,2,3,4 };

    printf("%d\n", sizeof(a));//16
    //sizeof(数组名),数组名表示整个数组,计算的是整个数组的大小,单位是字节
    printf("%d\n", sizeof(a + 0));//4或8
    //a不是单独存放在sizeof内部,也没有取地址,所以a就是首元素的地址,a+0还是首元素的地址
    //是地址,大小就是4或8个字节
    printf("%d\n", sizeof(*a));//4
    //*a中的a是数组的首元素地址,*a就是对首元素的地址解引用,找到的就是首元素
    //首元素的大小就是4个字节
    printf("%d\n", sizeof(a + 1));//4或8
    //这里的a是数组首元素的地址
    //a+1是第二个元素的地址
    //sizeof(a+1)就是地址的大小
    printf("%d\n", sizeof(a[1]));//4
    //计算的是第二个元素的大小
    printf("%d\n", sizeof(&a));//4或8
    //&a取出的是数组的地址,数组的地址,也就是个地址
    //是地址,大小就是4或8个字节
    printf("%d\n", sizeof(*&a));//16
    //*和&抵消了,*&a就相当于a
    //&a得到的是数组的地址,类型是int(*)[4],是一种数组指针
    //数组指针解引用找到的是数组
    printf("%d\n", sizeof(&a + 1));//4或8
    //&a取出的是数组的地址,类型是int(*)[4]
    //&a+1是从数组a的地址向后跳过了一个有4个整型元素的数组的大小
    //还是一个地址,大小就是4或8个字节
    printf("%d\n", sizeof(&a[0]));//4或8
    //&a[0]就是第一个元素的地址
    //计算的就是地址的大小
    printf("%d\n", sizeof(&a[0] + 1));//4或8
    //&a[0]+1是第二个元素的地址
    //大小是4或8个字节
    
    return 0;
}


http://www.mrgr.cn/news/59477.html

相关文章:

  • 为什么说 zsh 是 shell 中的极品?
  • 地球村上一些可能有助于赚钱的20个思维方式
  • 虚拟机上创建的网站在真机上无法访问的解决办法,以及hosts文件编辑的解决办法
  • 5.15 加载内核映像文件(1)
  • 单目深度估计评价指标及其含义说明
  • 线程同步(互斥锁条件变量)
  • 中药大数据(三)中医知识图谱的创建
  • 面向对象高级-static
  • Web大学生网页作业成品——动漫喜羊羊网页设计与实现(HTML+CSS)(4个页面)
  • MicroServer Gen8再玩 OCP万兆光口+IT直通之二
  • pandas习题 024:用字典构造 DataFrame
  • 在GeoTools中的Shapefile属性表读取效率之Shp与Dbf对比
  • 简直就是组件库里的高富帅啊
  • Python爬虫:从入门到精通
  • Bootstrap 4 按钮
  • 自定义类型:联合和枚举【下】
  • 【python库】PandasGUI介绍
  • w005基于Springboot学生心理咨询评估系统
  • 音视频开发之旅(98) -潜扩散模型(Latent Diffusion Model)原理及源码解析
  • VisionPro Basic - 01- 有关应用和作业