2015.09.06 C++笔记

void Func(char str_arg[100])
{
    printf("%d\n", sizeof(str_arg));
}
int main(void)
{
    char str[] = "Hello";
    printf("%d\n", sizeof(str));
    printf("%d\n", strlen(str));
    char *p = str;
    printf("%d\n", sizeof(p));
    Func(str);
}//输出:6 5 4 4

sizeof和strlen()都可以用来统计字符串所占用的大小,二者的区别为:

  1. strlen必须以char *作为参数,且必须以‘\0‘结尾;而sizeof()可以用于其他类型;
  2. 对字符串进行sizeof操作的时候,会把字符串的结束符“\0”计算进去;
  3. strlen统计字符串中字符的长度,不包括结尾的‘\0‘;
  4. 数组做sizeof的参数不退化,作为函数参数传递的时候,退化为指针。

sizeof(str):占用的字节为5 + 1 = 6,其中1为末尾的‘\0‘;

strlen(str):5

sizeof(p):计算的是指针的长度,32位机器上为4B

Func(str):传递的是指针,大小为4

void Func(char str_arg[2])
{
 int m = sizeof(str_arg); //指针的大小为4
 int n = strlen(str_arg); //对数组求长度,str_arg 后面的那个2没有任何意义
 printf("%d\n",m);
 printf("%d\n",n);
}
int main(void)
{
 char str[]="Hello";
 Func(str);
}
//输出:4 5
时间: 2024-10-12 23:16:51

2015.09.06 C++笔记的相关文章

2015.09.06 数据库笔记

第一章 数据模型三要素:数据结构,数据操纵,完整性约束主要的数据模型:层次模型,网状模型,关系模型完整性约束:实体完整性,参照完整性,用户定义完整性 数据库管理系统将具有一定结构的数据组成一个集合,它主要具有以下几个特点:1. 数据的结构化 数据库中的数据并不是杂乱无章.毫不相干的,它们具有一定的组织结构,属于同一集合的数据具有相似的特征.2. 数据的共享性 在一个单位的各个部门之间,存在着大量的重复信息.使用数据库的目的就是要统一管理这些信息,减少冗余度,使各个 部门共同享有相同的数据.3.

我关注的一周技术动态 2015.09.06

服务化和资源管理技术 1. Docker容器月刊(2015年8月) http://www.duokan.com/book/95298#rd 要点: 8月份docker 容器技术文章合集. 2. 苹果.彭博.Netflix的Mesos使用经验分享 https://mp.weixin.qq.com/s?__biz=MzA5OTAyNzQ2OA==&mid=207917628&idx=1&sn=36548b857da893fdd8b326803d8d6eff&scene=1&am

2015.09.05 组成原理笔记

一二.概论 三.系统总线 四.存储器 1. 存储器层次结构: 寄存器 缓存(Cache) 主存 辅存(磁盘,磁带) 2. 静态RAM[坑] 动态RAM[坑] ROM 只读存储器 PROM (一次性)可编程只读存储器 EPROM 可擦除可编程只读存储器 EEPROM 电擦除可编程只读存储器 Flash Memory 闪存 3. Cache地址映射[坑]

2015.09.05 网络笔记

IPv4地址 {<网络号><主机号>} 主机号全为零的表示网络本身,全为1的表示网络的广播地址 A类:1~126,网络号为第一个字节 B类:128~191,网络号为前两个字节 C类:192~223,网络号为前三个字节 D类:224~239,多播地址 私有IP地址(可以被LAN重复使用) A类:10 B类:172.16~172.31 D类:192.168

2015.09.08 C++笔记

#include <iostream> #include <string> using namespace std; int *f1(int *i) { ++(*i); return i; } int *f2(int *i) { return i; } void f3(int *i, int *j) { cout << *i <<" "<< *j <<endl; } int main(void) { //04.si

2015.09.04 数据结构笔记

插入排序:直接插入排序,希尔排序交换排序:冒泡排序,快速排序选择排序:简单选择排序,堆排序归并排序 所有简单排序都是稳定的,所有高级排序都是不稳定的,归并排序是稳定的:所有简单排序时间复杂度都是O(n2),所有高级排序和归并排序都是O(nlogn)所有简单排序和选择排序(如堆排序)辅助空间都是O(1),快速排序为O(logn),归并排序为O(n2)

【我的书】Unity Shader的书 — 目录(2015.09.04更新)

写在前面 感谢所有点进来看的朋友.没错,我目前打算写一本关于Unity Shader的书. 出书的目的有下面几个: 总结我接触Unity Shader以来的历程,给其他人一个借鉴.我非常明白学Shader的艰难,在群里也见了很多人提出的问题.我觉得学习Shader还是一件有规律可循的事情,但问题是中文资料难觅,而大家又不愿意去看英文...这对我有什么好处呢?强迫我对知识进行梳理,对细节问题把握更清楚. 第二个原因你懂的. 关于本书的定位问题: 面向Unity Shader初学者,但要: 有一定的

我关注的一周技术动态 2015.09.27

分布式系统实践 1. 走向分布式 http://dcaoyuan.github.io/papers/pdfs/Scalability.pdf 要点: 这是台湾的一个作者写的为期30天的分布式系统设计学习小册子, 刚开始涵盖了分布式系统设计的基本理论, 包括partiton, replication和CAP理论, 后面以kafka和zookeeper为例, 将上述理论加以实例化介绍, 内容非常精简, 适合初学者阅读和学习. 2. 如何编写一个分布式数据库 http://mp.weixin.qq.c

2015.11.06 学习Ubuntu下常用命令

2015.11.06 学习Ubuntu下常用命令 1.关闭防火墙:ufw disable 2.开启防火墙:ufw enable 3.防火墙状态:ufw status 4.查看占用的端口:#lsof -i 5.查看某一个端口:#lsof -i:8080  或者是: #netstat -apn|grep 8080————接着:#ps -aux|grep 进程号 6.结束占用端口的进程:#killall 进程名 7.自己写一遍,记得牢!