您的位置:首页 > 编程语言 > C语言/C++

C语言中 sizeof 操作符使用时的一些细节 和 指针类型的大小

2010-09-25 15:00 561 查看
C语言中 sizeof 操作符使用时的一些细节

sizeof运算符总结

1、sizeof()不是函数,它是个运算符

2、sizeof()中如果添加了其他的任何运算,他们是都不会参与运算(但是 取内容* 会执行)

3、sizeof()可以显示数组的大小,但是不能显示malloc()分配的大小,因为malloc()是从堆中分配内存的,这个数值是存储在这个空间的一个字节中...是无法得到的(不过希望以后我能通过别的途径找到获取它的方法...)
并且,sizeof()也无法得到经过函数传递以后的数组的大小(因为这个参数是传址的,*p已经退化成为指针,而非数组)。

#include <stdio.h>
//test()函数的返回值是错误的,sizeof无法得知p所指向的数组的大小
int test(int *p){
return(sizeof(*p));
}

void main(){
int arr[10];
double *p;
double x=3.14;
int *mall=(int *)malloc(40);
p=&x;
printf("%p/n",p);				//0012FF3C
printf("%d/n",sizeof(p));		//4
printf("%d/n",sizeof(p++));	//4  不会进行自增运算,之后也不会...
printf("%d/n",sizeof(x));		//8
printf("%d/n",sizeof(*p));		//8  但是会进行 取内容 运算
printf("%d/n",sizeof(&p));		//4  不会进行取地址运算
printf("%p/n",p);				//0012FF3C p的值未变
printf("%d/n",sizeof(arr));	//40
// printf("%d/n",sizeof(mall));	//错误!无法获取堆的大小
printf("%d/n",test(arr));		//4		错误的大小!这个数值实际上是指针变量的大小,所以,我们无法经过函数参数后在获取数组的大小
}


顺便提一句,C语言中指针类型的大小是同一的(在VC中都是4Bytes)

#include <stdio.h>

void main(){
struct st{
int a;
int b;
float c;
double d;
char e;
};
struct st *stp;
int *ip;
float *fp;
double *dp;
char *cp;
int **ipp;
printf("%d/n",sizeof(stp));		//4
printf("%d/n",sizeof(ip));		//4
printf("%d/n",sizeof(fp));		//4
printf("%d/n",sizeof(dp));		//4
printf("%d/n",sizeof(cp));		//4
printf("%d/n",sizeof(ipp));		//4

printf("%d/n",sizeof(++cp));	//4
}


附别人的一篇文章...加我的笔记...

http://blog.csdn.net/nista/archive/2010/09/25/5905372.aspx

网上的几篇文章:

http://baike.baidu.com/view/1078660.htm

http://wenwen.soso.com/z/q146097232.htm
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐