Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1485118
  • 博文数量: 181
  • 博客积分: 3308
  • 博客等级: 中校
  • 技术积分: 2227
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-03 12:03
个人简介

我是zoro

文章分类

全部博文(181)

文章存档

2015年(1)

2013年(35)

2012年(39)

2011年(50)

2010年(56)

分类: LINUX

2010-10-27 10:45:58

char str[]="hello world\0";

char str2[12]="hello world\0";

char s1[]="";

char s2[]="hello world!";

char *p=s2;

char *q=NULL;

void *r=malloc(100);

sizeof(str)=13   //未规定数组个数,末位加'\0',即12+1=13

sizeof(str2)=12  //规定个数的数组,其大小为n*(单元大小)

sizeof(s1)=1   //系统自动补'\0'

sizeof(s2)=13

sizeof(p)=4  //p为指针

sizeof(q)=4

sizeof(r)=4

===============================

void func(char str[100])

{

    sizeof(str)=?

}

答案:sizeof(str)=4

函数参数传递有两种方式:值传递和地址传递。上题传递方式为地址传递,str[100]虽为数组,但其接收的只是一个地址,char str[100]等同于char *str,sizeof(str)是计算指针的大小,在32计算机中,指针的大小均为4个字节。

============================

char str2[7]="hello world\0";

sizeof(str2)=7

strlen(str2)=11  //可见strlen是输出到'\0'结束

puts(str2)=hello wЄ //出现乱码
============================
char s1[10]={'m','o','b','i','l'};
char s2[20]={'A','N','S','I','\0','C','+','+'};
char s3[6]={'I','S','O','C','+','+'};
计算:
strlen(s1)=5
strlen(s2)=4
strlen(s3)=不确定
sizeof(s1)=10
sizeof(s2)=20
sizeof(s3)=6
可见strlen是遇到'\0'结束计算,其大小为'\0'之前的空间大小。
数组大小标定的,不管其内容如何,sizeof的值总是
n*(单元大小)

阅读(1801) | 评论(0) | 转发(0) |
0

上一篇:简单的makefile实现

下一篇:内存对齐

给主人留下些什么吧!~~