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

数组名和指针数组名深度复习

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

//sizeof只关注占用内存空间的大小,不在乎内存中存放的是什么
//是操作符
/*
int main()
{
    char arr[] = { "abcdef" };
    //a b c d e f \0

    printf("%d\n", sizeof(arr));//7
    //在初始化的时候f后面还有一个\0
    printf("%d\n", sizeof(arr + 0));//4或8
    //arr+0是首元素地址,是地址就是4或8
    printf("%d\n", sizeof(*arr));//1
    //a的地址解引用就是a,一个字节
    printf("%d\n", sizeof(arr[1]));//1
    //第二个元素b,一个字节
    printf("%d\n", sizeof(&arr));//4或8
    //取出整个数组的地址,是地址就是4或8
    printf("%d\n", sizeof(&arr + 1));//4或8
    //跳过这个数组还是地址,是地址就是4或8
    printf("%d\n", sizeof(&arr[0] + 1));//4或8
    //是b的地址,是地址就是4或8

    return 0;
}
*/

#include <string.h>
/*
//strlen是求字符串长度的,关注的是字符中的\0,计算的是\0之前出现的字符的个数
//是库函数,只针对字符串
int main()
{
    char arr[] = { "abcdef" };
    //a b c d e f \0

    printf("%d\n", strlen(arr));//6
    //字符串长度读取到\0结束,计算\0之前出出现的字符的个数
    printf("%d\n", strlen(arr + 0));//6
    //首元素地址开始向后读取到\0结束
    printf("%d\n", strlen(*arr));//err
    //传的是第一个元素,非法访问
    printf("%d\n", strlen(arr[1]));//err
    //传的是第二个元素,非法访问
    printf("%d\n", strlen(&arr));//6
    //
    printf("%d\n", strlen(&arr + 1));//随机值
    //跳过整个数组向后读取到\0结束
    printf("%d\n", strlen(&arr[0] + 1));//5
    //从第二个元素开始向后读取到\0结束
    
    return 0;
}
*/


int main()
{
    char* p = "abcdef";//a b c d e f \0
    //p指向的是首字符a,p里面存放的是a的地址

    printf("%d\n", sizeof(p));//4或8
    //p是一个指针变量,存放的是地址,是地址大小就是4或8
    printf("%d\n", sizeof(p + 1));//4或8
    //地址+1还是地址,是地址就是4或8
    printf("%d\n", sizeof(*p));//1
    //p存的是a的地址,对p解引用就是a,a的大小就是1个字节
    printf("%d\n", sizeof(p[0]));//1
    //p[0]等价于*(p+0)相当于*p
    printf("%d\n", sizeof(&p));//4或8
    //取出的是地址,是地址就是4或8
    printf("%d\n", sizeof(&p + 1));//4或8
    //地址+1还是地址,是地址就是4或8
    printf("%d\n", sizeof(&p[0] + 1));//4或8
    //p[0]相当于*p是首字母a,取出a的地址+1跳过一个字符就是b的地址

    printf("%d\n", strlen(p));//6
    //p里存放的是a的地址,从a向后数到\0结束
    printf("%d\n", strlen(p + 1));//5
    //a的地址+1是b的地址,从b向后数到\0结束
    printf("%d\n", strlen(*p));//err
    //*p是a,传过去,非法访问
    printf("%d\n", strlen(p[0]));//
    //*p还是a,传过去,非法访问
    printf("%d\n", strlen(&p));//随机值
    //&p取出的是p的地址,这里的内存什么时候遇到\0是不确定的
    printf("%d\n", strlen(&p + 1));//随机值
    //还是随机值
    printf("%d\n", strlen(&p[0] + 1));//5
    //a的地址+1是b的地址,从b开始向后数到\0结束

    return 0;
}

http://www.lryc.cn/news/471516.html

相关文章:

  • Linux 诞生
  • 借助Aspose.Email,管理受密码保护的 PST 文件
  • MySQL数据库MHA高可用
  • DevEco Studio使用技巧和插件推荐
  • 使用Node.js与Express构建RESTful API
  • 从0开始搭建一个生产级SpringBoot2.0.X项目(二)SpringBoot应用连接数据库集成mybatis-plus
  • Docker部署教程:打造流畅的斗地主网页小游戏
  • redis的客户端
  • 图片分类标注工具python
  • Rust命令行,实现自动反编译Android APK包工具
  • 10. NSTableView Table 数据表格
  • javase笔记8---File与IO流
  • docker上传离线镜像包到Artifactory
  • 【专用名词的离线语音识别在2024年底的解决方法调查-会议签到的补充】
  • OS基础-
  • 《大型语言模型实战指南:应用实践与场景落地》一文详解大型语言模型的11种微调方法
  • 嵌入式浏览器 -- Chromium VS Firefox
  • 权限大、数量多、破坏强、管理难......企业特权访问管理怎么管?
  • UE5 第一人称示例代码阅读0 UEnhancedInputComponent
  • 如何在Linux下安装和配置Docker
  • apisix的原理及作用,跟spring cloud gateway有什么区别?
  • 华为HarmonyOS实现实时语音识别转文本
  • DIY可视化-uniapp悬浮菜单支持拖动、吸附-代码生成器
  • HTTP cookie 与 session
  • 智慧停车场导航系统架构及反向寻车系统解决方案
  • 【小程序上传图片封装2024,支持多图,带进度,上传头像】
  • [A-14]ARMv8/ARMv9-Memory-内存模型的类型(Device Normal)
  • 驾校管理系统|基于java和小程序的驾校管理系统设计与实现(源码+数据库+文档)
  • @Mapper使用中遇到的问题解法汇总
  • 深度学习:YOLO V3 网络架构解析