#include<stdio.h>
#include<string.h>
int step(int n){
if(1==n)
return 1;
else if(2==n)
return 2;
else if(3==n)
return 4;
else
return step(n-1)+step(n-2)+step(n-3);
}
void Func(char str_arg[100])
{
printf("%d\n",sizeof(str_arg));
}
void littleorbig(){//判断小端模式还是大端模式
int i=1;
char *p = (char*)&i;
if(*p==1)
printf("is little endian\n");
else
printf("is big endian\n");
}
union UA{//Union的大小为其内部所有变量的最大值,并且按照类型最大值的整数倍进行内存对齐。
char c[10];
char cc1;
} ua;//10
union UB{
char c[10];
int i;
} ub;//12
union UC{
char c1;
int i;
double d1;
} uc;//8
union UD{
char c[10];
int i;
double d1;
} ud;//16
struct A{//struct的内存大小为每个数据内存的加和,首先按照最大的数据类型进行单个分配,
char c1;//如果前一个数据占用不了所有的内存,而剩下的内存可以放下下一个数据,
double b1;//则第二个数据不另外分配内存,否则重新分配一个最大类型的内存单元。
} structa;//16
struct B{
char c1;
char c2;
double b1;
} structb;//16
struct C{
char c1;
double b1;
char c2;
} structc;//24
union {
int i;
char c[2];
} utest;
int main(void)
{
char str[]="Hello";
printf("%d\n",sizeof(str)); //对字符串进行sizeof操作的时候,会把字符串的结束符“\0”计算进去的
printf("%d\n",strlen(str)); //进行strlen操作求字符串的长度的时候,不计算\0的。
char *p = str;
printf("%d\n",sizeof(p));
Func(str); //数组作为函数参数传递的时候,已经退化为指针了,Func函数的参数str_arg只是表示一个指针,那个100不起任何作用的。
int n = step(4);
printf("%d\n",n);
int x=1;
printf("-x+x<<8=%d\n",-x+(x<<8));
printf("x<<8-x=%d\n",(x<<8)-x);
littleorbig();
printf("sizeof ua is %d\n",sizeof(ua));
printf("sizeof ub is %d\n",sizeof(ub));
printf("sizeof uc is %d\n",sizeof(uc));
printf("sizeof ud is %d\n",sizeof(ud));
printf("sizeof structa is %d\n",sizeof(structa));
printf("sizeof structb is %d\n",sizeof(structb));
printf("sizeof structc is %d\n",sizeof(structc));
utest.c[0] = 10;
utest.c[1] = 1;
printf("test.i is %d\n",utest.i);
return 0;
}
爬楼梯 struct union内存分配 大小端判断
最新推荐文章于 2024-05-10 13:09:29 发布