预处理、const、static与sizeof-sizeof与strlen有哪些区别
1:它们的区别如下:
(1)sizeof是操作符,strlen是函数。
(2)sizeof操作符的结果类型是size_t,它在头文件中typedef为unsignedint类型,该类型保证能容纳实现所建立的的最大对象的字节大小。
(3)sizeof可以用类型作参考,strlen只能用char*做参考,且必须是以“\0”结尾的。
(4)数组做sizeof的参数不退化,传递给strlen就退化为指针了。
(5)大部分编译程序在编译的时候sizeof就被计算过了,这就是sizeof(x)可以用来定义数组维数的原因。strlen结果要在运行的时候才能计算出来,它用来计算字符串的长度,不是类型占内存的大小。
(6)sizeof后如果是类型,必须加括弧;如果是变量名,可以不加括弧。这是因为sizeof是个操作符而不是函数。
(7)在计算字符串数组的长度上有区别。例如:
char str[]="";
int a=strlen(str);
int b=sizeof(str);
a计算的是以0x00结束的字符串的长度(不包括0x00结束符),这里结果是10。
b计算的则是分配的数组str[20]所占的内存空间的大小,不受里面存储内容的改变而改变,这里结果是20.
8:如果要计算指针指向的字符串的长度,则一定要使用strlen。例如:
char* ss="";
int a=sizeof(ss);
int b=strlen(ss);
a计算的是ss指针占用的内存空间大小,这里结果是4.
b计算的是ss指向的字符串的长度,这里结果是10.
预处理、const、static与sizeof-sizeof与strlen有哪些区别的更多相关文章
- sizeof运算符和strlen函数的区别
1.sizeof是运算符,而strlen是函数. 2.sizeof操作符的运算结果为size_t,他在头文件中的typedef为unsigned int.该类型保证能容纳所操作对象的最大字节大小. 3 ...
- 字符串的sizeof长度及strlen长度
在C/C++中,字符串是以零('\0')结尾的.比如,对于下面的字符串: "hello" 在最后一个字符'd'后面,还有一个我们肉眼看不见的'\0'字符,作为该字符串的结束符.所 ...
- 字符串 前篇 ---- sizeof()操作符和strlen()库函数
本文不是研究sizeof(), strlen() 的深奥定义和原理,我们不会在理论上太过钻牛角尖.希望读这篇文章的你,也不要太过抠概念(不要拘泥于语法).我们只做 实用意义 的介绍和讨论. 在介绍字符 ...
- (三)论sizeof与strlen之间的区别
一.sizeof sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组.指针.类型.对象.函数等. 它的功能是:获得保 ...
- 说明sizeof和strlen之间的区别。
解析:由以下几个例子我们说明sizeof和strlen之间的区别.第1个例子: sizeof(ss)结果为4,ss是指向字符串常量的字符指针.sizeof(*ss)结果为1,*ss是第一个字符.第2个 ...
- 字符串赋值方式理解 sizeof 和strlen的一些区别
#include<stdio.h>#include<string.h> int main(){ int a,i=0; char ch[10000]; while(scanf( ...
- const,static,extern 简介
const,static,extern 简介 一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编 ...
- 李洪强iOS经典面试题155 - const,static,extern详解(面试必备)
李洪强iOS经典面试题155 - const,static,extern详解(面试必备) 一.const与宏的区别(面试题): const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽 ...
- const ,static,inline
const: 1 定义变量 ,如下写法都可以: TYPE const ValueName = value; const TYPE ValueName = value; ...
- const, static and readonly
const, static and readonly http://tutorials.csharp-online.net/const,_static_and_readonly Within a cl ...
随机推荐
- php对象转换为数组的部分代码
function object_array($array){ if(is_object($array)){ $array = (array)$array; } if(is_array($array)) ...
- GC原理图
GC原理图,Jdk1.6及以下版本 永久代 永久代是Hotspot虚拟机特有的概念,是方法区的一种实现,别的JVM都没有这个东西.在Java 8中,永久代被彻底移除,取而代之的是另一块与堆不相连的本地 ...
- php 限制标题长度,将一个中文转换成一个字符
点击链接加入群[php/web 学习课堂]:https://jq.qq.com/?_wv=1027&k=5UJ9vEa 欢迎大家加入,一起讨论学习 玩这个功能的时候,我们要注意一点,我们是用中 ...
- 安卓开发之获取SD卡空间数据
package com.lidaochen.getsdcardspace; import android.os.Environment; import android.support.v7.app.A ...
- 使用openSSL构造一个支持https的nodejs服务器
首先通过下面的链接下载openSSL https://slproweb.com/products/Win32OpenSSL.html 下载完毕后,执行openssl进入交互式界面: 使用命令生成pri ...
- IDEA 社区版集成TOMCAT
直接在POM.XML中添加以下内容 <plugin> <groupId>org.apache.tomcat.maven</groupId> <ar ...
- 目标检测后处理之NMS(非极大值抑制算法)
1.定义: 非极大值抑制算法NMS广泛应用于目标检测算法,其目的是为了消除多余的候选框,找到最佳的物体检测位置. 2.原理: 使用深度学习模型检测出的目标都有多个框,如下图,针对每一个被检测目标,为了 ...
- python学习笔记:安装boost python库以及使用boost.python库封装
学习是一个累积的过程.在这个过程中,我们不仅要学习新的知识,还需要将以前学到的知识进行回顾总结. 前面讲述了Python使用ctypes直接调用动态库和使用Python的C语言API封装C函数, C+ ...
- Hdu 4661 树上拓扑序计数
#include <bits/stdc++.h> using namespace std; typedef long long ll; ; ; ; ], nxt[MAXM << ...
- Mac&Appium&Python自动化测试-环境搭建之安卓SDK
一.摘要 本博文将详细讲述在Mac环境下的jdk安装.配置以及环境校验:安卓sdk安装.配置以及环境校验 二.安装包工具准备: jdk1.8.0(64 位) android-sdk_r24.4.1-m ...