你不知道的C\C++语言

1.

struct Test{

int a;

};

int main(void)
{
int a=10;
struct Test *b = (struct Test*)&a;//int型强制转换成Test类型
printf("%d\n",*b);
printf("%d\n",b->a);
return 0;

}

解释:结构体的地址所指向的地址是第一个成员数据的地址,Test结构体只有一个int型数据,所以*b = b->a;

2.
//静态成员的使用和特点:静态成员函数是nomember类型的函数,可以做为callback函数使用
class A
{
    public:
        int a;
        void print1(){printf("yyy\n");}
        static void print(){
            printf("xxx\n");
        }
        void printb(){printf("b = %d\n",b);}//成员函数可以访问静态成员变量
    private:
        static int b;//静态成员变量需要初始化,否则不能使用
};
int A::b = 0;//静态成员变量初始化需要在类定义之外,而且不需要加static关键字
void func(void (*f)())
{
    f();
}
int main()
{
    A a;
    int *r = &a.a;
    *r = 10;
    printf("%d\n",a.a);
    a.printb();
    void (*f)() = A::print;//静态成员函数跟一般nomember函数使用一样
    f();
//    func((&a)->print1);//提示错误实参类型为void (A::)()与void (*)()不匹配
    func(A::print);//A 类静态成员函数可以当成callback函数被使用
    func(a.print);//正常
}
3.

//内存对齐问题,在win32系统下,C-Free 3.5编辑器验证

//结论是结构体体对齐以结构体成员类型最大值为对齐标准

//linux下gcc是4对齐,所以结果与win32环境不同
typedef struct{
 char a;
 char b;
 char c;
 int d;
 }CHAR;
typedef enum{MON,TUE,WEN,THUR,FRI,SAT,SUN}WEEKDAY;
typedef struct{
    char a;
    int c;
    double d;
    char b;
}XXX;
int main(int argc,char* argv[])
{
    printf("%d\n",sizeof(XXX));  //内存以double大小对齐  24 (linux 20)
    printf("%d\n",sizeof(CHAR));  //内存以int大小对齐 8
    printf("%d\n",sizeof(WEEKDAY));  //enum结构大小固定 4
}
4.unsigned int和int大不相同

for(unsigned t = 2; t >= 0; t--)
     printf("%d",t);

输出结果是多少?

答案:这是个无穷循环,循环一开始输出210后t=(unsigned)-1,-1在内存中的表示是1111111111111111,是一个很大的值,这样程序又从unsigned最大值开始这样周而复始陷入死循环中。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值