C语言中 sizeof 操作符使用时的一些细节 和 指针类型的大小
2010-09-25 15:00
561 查看
C语言中 sizeof 操作符使用时的一些细节
sizeof运算符总结
1、sizeof()不是函数,它是个运算符
2、sizeof()中如果添加了其他的任何运算,他们是都不会参与运算(但是 取内容* 会执行)
3、sizeof()可以显示数组的大小,但是不能显示malloc()分配的大小,因为malloc()是从堆中分配内存的,这个数值是存储在这个空间的一个字节中...是无法得到的(不过希望以后我能通过别的途径找到获取它的方法...)
并且,sizeof()也无法得到经过函数传递以后的数组的大小(因为这个参数是传址的,*p已经退化成为指针,而非数组)。
顺便提一句,C语言中指针类型的大小是同一的(在VC中都是4Bytes)
附别人的一篇文章...加我的笔记...
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
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
相关文章推荐
- sizeof()的使用及各种数据类型的字节大小
- C语言中一些类型的变量的定义和使用
- sizeof()的使用及各种数据类型的字节大小
- 程序猿之---C语言细节22(函数返回指针注意事项<悬空指针>、查看进程可以分配的内存大小)
- 程序员之---C语言细节24(段错误、类型提升、sizeof 'A')
- C++语法基础--类(class)--类型别名,this指针,初始化式,友元的一些注意细节
- Swift中对C语言接口缓存的使用以及数组、字符串转为指针类型的方法
- 使用python向C语言的链接库传递数组、结构体、指针类型的数据
- c语言:sizeof的使用,其不是函数,是一个操作符关键字,定义一个数组arr,输出arr和&arr的区别
- C语言:数据类型、存储区字节数、占位符、sizeof、输入输出、二进制相关、操作符(++,--)、主函数参数
- 在不使用*、/、+、-、%操作符的情况下,如何求一个数的1/3?(更新了一些解释,用C语言实)
- C语言指针类型、指针大小、指针所指元素大小、指针加减运算
- C语言学习2:sizeof ,数据类型,scanf,算式操作,赋值与比较操作,逻辑操作,位的操作,条件运算符,特异赋值结果,强制转换,使用变量要注意的
- sizeof()的使用及各种数据类型的字节大小
- 指针的大小--sizeof问题和sizeof使用规则
- C语言--无类型指针void*的学习与使用
- 学习C语言:使用 sizeof 的一些结果
- 程序猿之---C语言细节24(段错误、类型提升、sizeof 'A')
- 7_21|C语言|操作符注意事项|sizeof使用讲解|结构体简单介绍
- C语言 指针要注意的一些细节问题