1、sizeof运算符:sizeof是一个特殊的运算符,它有两种形式:sizeof 表达式和sizeof (类型名).对于sizeof运算符要注意几点:
1)如果是表达式的话,括号可以省略,但是对于类型,括号不能省;
2)sizeof求算的是所占的空间,如果作用于表达式,这个表达式是不进行求值的,只根据类型转换求得表达式的类型,而表达式的类型在编译时就可以确定。
#include<stdio.h>
int main(void)
{
int i=1;
int j;
j=sizeof i++;
printf("%d %d\n",i,j);
return 0;
}
程序执行结果为:1 4
可以看出i的值并没有改变,可知表达式i++并没有进行求值。
来看一道暴风影音的笔试题:
#include <stdio.h>
void main(){
char a1;
char *a2;
char **a3;
char a4[101];
char *a5[10];
char (*a6)[10];
char (*a7)(char);
struct ss{
char b1;
char *b2;
}s1;
//%u表示无符号10进制整型,%lu表示输出无符号长整型整数
printf("%lu\n",sizeof(a1));//1
printf("%lu\n",sizeof(a2));//4
printf("%lu\n",sizeof(a3));//4// 指向指针的指针
printf("%lu\n",sizeof(a4));//101
printf("%lu\n",sizeof(a5));//40表示有10个指针数组
printf("%lu\n",sizeof(a6));//4?
printf("%lu\n",sizeof(a7));//4?
printf("%lu\n",sizeof(s1));//8
}
接着来看如下的一道题:int getSize(int data[]){ //data会退化为指针
return sizeof(data);
}
void main(){
int data1[]={1,2,3,4,5};
int size1=sizeof(data1); // data1就是一个数组
int* data2=data1;
int size2=sizeof(data2);
int size3=getSize(data1);
printf("%d,%d,%d",size1,size2,size3);//20 4 4
}
对于结构体数据进行sizeof运算会相对复杂一些。