得到指针指向的数组的长度

2023-05-16

1  、定义数组,要给定其长度,也可以用Type a[ ] = {……} 的方式。

在对数组进行操作时,可能需要计算数组长度,方法是:sizeof(数组名)/sizeof(元素类型)

 


数组int a[4]; sizeof(a)=4*4=16字节 (int为4个字节)
int *p=a; sizeof(p)=4字节
对数组应用sizeof,可以得到整个数组分配的字节数(存储全部数据占用的内存字节数)
对指针应用sizeof,只是得到分配给用来存储一个地址值的指针所用的字节数,即4个字节。
(上面都是在32位编译系统)
 
C++中sizeof得到的是字节数,也就是你所说的“长度单位”
 
求大小,可以手动计算,需要知道数据类型,是否有字节对齐(编译器选项,也可代码控制和切换)。我以前做过统计结构体大小的小程序,同时计算每个成员变量的相对地址。  

转自知乎-----
C 语言跟 C++ 是不同的。最大的不同之处在于,它不会象变魔法般的在后台以程序员不知道的方式添加一些奇奇怪怪的东西。——这可能是好事,也可能是坏事,取决于你在什么领域进行编程。

一个数组就是一串序列,它的地址以及存储的内容都一目了然在那里了,没有任何地方记录了有关其「长度」的信息。所以你自然没有办法知道它的长度。 信息都保存在内存中,你能获取一个信息就意味着这个信息或者用来推算这个信息的相关信息必须被保存在内存中的某个地方,你能知道一个数组的长度就必须有某个地方保存了这个数组的长度信息。

题主要的是有某个「魔法」的方法知道一个指针指向的内容的长度,但如果你根本没有在任何地方保存它的长度,没有人知道,又如何能获取?

所以,传递长度本质上来说就这么几个办法,1,单独传一个长度参数,(C方式),或者对数据内容进行约定(C字符串方式),2,把数据包装成一个结构,结构中有一个字段是长度,另外一个字段是数据内容,同时在添加一些其他的字段作为控制信息等(C++方式)。3,其他各种黑科技,使用这些黑科技一般会造成程序不可移植,只能适用于特定场合。


作者:pansz
链接:https://www.zhihu.com/question/26198842/answer/32367092
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

2、指针指向的字符数组长度的获取方法,不能用sizeof,因为用sizeof(指针),得到指针长度为4

应该用strlen()函数。


#include <iostream.h>
#include <string.h>
int num(char *ptr)
{
     int bb = strlen(ptr);
     return bb;
}
int main()
{
     char *p= new char[100];
     p = "string";
     int b = num(p);
     cout<<b<<endl;
     return 0;

}

3.如果是通过malloc或者new分配的数组,由于分配的时候是自己制定的数组大小,所以不需要计算就可以得到。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

得到指针指向的数组的长度 的相关文章

随机推荐

  • WSL:登陆指定Linux子系统(在安装了多个Linux子系统的情况下)

    To login you need to run wsl d lt Distribution Name gt Step 5 Setup user accounts Notice in the above image that the log
  • Pytorch分布式训练快速入门教程(一):从Accelerate说起

    意在从TopDown的模式 xff0c 从应用出发逐步走向技术的底层 如此不至于在长时间的底层理论学习上花费过多时间 xff0c 而可以快速上手应用 xff0c 同时又不会让底层理论缺席 背景知识 为后续专题做知识储备 xff0c 涵盖数学
  • 大语言模型的涌现能力:现象与解释

    注1 本文整理自我在今年3 月 11 日 中国人工智能学会 主办的 ChatGPT 及大模型专题研讨会 上 大型语言模型的涌现能力 现象与解释 的现场分享 介绍了大语言模型中的涌现现象 以及关于涌现能力背后原因的相关猜想 感谢CSDN帮助整
  • 大模型、知识图谱之间的关系

    作者 AI未来科技 链接 https www zhihu com question 590846667 answer 2954840595 来源 知乎 著作权归作者所有 商业转载请联系作者获得授权 非商业转载请注明出处 nbsp 大模型 如
  • 大模型“涌现”的思维链,究竟是一种什么能力?

    所谓 涌现 在大模型领域指的是当模型突破某个规模时 xff0c 性能显著提升 xff0c 表现出让人惊艳 意想不到的能力 比如语言理解能力 生成能力 逻辑推理能力等 一般来说 xff0c 模型在100亿到1000亿参数区间 xff0c 可能
  • android 使用kotlin 获取设备id

    在 Android 中 xff0c 获取设备的唯一标识符是一项常见的任务 以下是使用 Kotlin 语言获取设备 ID 的步骤 xff1a 1 在 AndroidManifest xml 文件中添加以下权限 xff1a lt uses pe
  • ubuntu apache2 php 中文乱码

    今天在ubuntu 14 下配置apache2 发现解析 php文件的时候中文会出现乱码 xff0c 于是检查了一下 php ini的配置 xff0c 发现 default charset 61 UTF 8 这项没有打开 xff0c 于是把
  • 16-CoreData之多表关联(存储自定义数据模型)

    多表关联 1 1 简介 什么是多表关联 在处理数据库的关系中 xff0c 无非只有三种关系一对一 xff1a 一个老师只能在一个教室上课 xff0c 不可能同时在两个教室上课一对多 xff1a 一个教室可以有多个学生 xff0c 但一个学生
  • Redis的基础

    Redis 文章目录 Redis基础和memcache的区别为什么单线程能有很高的效率具体原因连接过程一次连接流程多个socket xff0c io多路复用程序 xff0c 消息队列 xff0c 文件事件分派器 xff0c 事件处理器 命令
  • python 查询windows的cpu、内存使用率

    coding UTF 8 import os def get info metric metric cmd map 61 34 cpu usage rate 34 34 wmic cpu get loadpercentage 34 34 m
  • 安装GitLab及简单使用

    系统 xff1a CentOS 7 3x64 配置gitlab源 到 etc yum repos d目录下新建gitlab ce repo文件 xff0c gitlab ce name 61 gitlab ce baseurl 61 htt
  • iOS UIBezierPath 通过贝塞尔曲线画圆环 创建一个环形进度指示器

    一 先简单了解一下通过贝塞尔曲线画一个圆的基本概念 xff0c 坐标系请参考下图 要画一个贝塞尔曲线要有几个基本的要素 起始角度 结束角度 半径 是否按照顺时针方向 贝塞尔曲线只是规划了一个Layer的路径 xff0c 而不能真正的展示出来
  • VMware虚拟机安装Ubuntu22.04并配置网络

    一 Ubuntu22 04下载 地址 xff1a https ubuntu com Ubuntu Desktop 包含图形用户界面 Ubuntu Server 不包含图形用户界面 二 VMware安装Ubuntu22 04 三 配置网络 设
  • error RC2108: expected numerical dialog constant

    在我们用图形控件Picture Control在对话框上添加图片是 xff0c 经常会出现error RC2108 expected numerical dialog constant 解决方法 xff1a 双击error rc2018 打
  • uos服务器系统安装PVE

    文章目录 一 PVE介绍 二 系统和组件版本 三 部署pve 1 修改主机名 2 pve安装 3 浏览器访问 一 PVE介绍 Proxmox VE Proxmox Virtual Environment 有方便易用的WEB界面 基于JAVA
  • 通过设置JDK解决存在多个Gradle后台进程的问题

    使用Android Studio经常会在Event Log窗口遇到如下报错 xff1a 简单解释下就是如果后台有一个常驻的gradle守护进程 xff0c 可以提高我们构建效率 因为这样不但可以避免每次都重新启动JVM xff0c 并且可以
  • intellij idea关闭vim模式

    tools gt vim emulator
  • 最大似然估计和最小二乘估计的区别与联系

    看似最小二乘估计与最大似然估计在推导得到的结果很相似 xff0c 但是其前提条件必须引起大家的注意 xff01 xff01 xff01 对于最小二乘估计 xff0c 最合理的参数估计量应该使得模型能最好地拟合样本数据 xff0c 也就是估计
  • 关于Web API 2.0中的Options请求返回405的问题

    关于Web API 2 0中的Options请求返回405的问题 前提 xff1a IIS寄宿的网站 当你向服务器发送非简单请求时 xff0c 客户端会先发送一条预检请求 xff0c 借以确认当前请求源和待请求方法是否被网站允许 xff08
  • 得到指针指向的数组的长度

    1 定义数组 xff0c 要给定其长度 xff0c 也可以用Type a 61 的方式 在对数组进行操作时 xff0c 可能需要计算数组长度 xff0c 方法是 xff1a sizeof 数组名 sizeof 元素类型 数组int a 4