sizeof(strb++); 的问题 为什么strb没有++

#include <cstdio>
#include <cstring>

void func(char str[50])
{
    printf("str:%s\n", str);
    printf("A = %d, B= %d\n", sizeof(str), strlen(str));
}

int main()
{
    char stra[] = "HelloWorld";
    char* strb = stra;
    printf("C = %d, D = %d\n", sizeof(stra), sizeof(strb++));  // strb并没有++
    sizeof(strb++);  // strb并没有++
    sizeof(strb++);  // strb并没有++
    printf("strb++:%s\n", strb);
    func(++strb);
    printf("E = %d, F = %d\n", strlen(stra), strlen(strb++));

}

/**
  输出:
    C = 11, D = 4
    strb++:HelloWorld
    str:elloWorld
    A = 4, B= 9
    E = 10, F = 9
*/


sizeof是C语言的一种单目操作符,如C语言的其他操作符++、--等。

它并不是函数。根据C99规范, sizeof是一个编译时刻就起效果的运算符,在其内的任何运算都没有意义, sizeof(strb++);
 在编译的时候被翻译成 sizeof((strb++的数据类型)) 也就是 sizeof(char); 然后才会继续编译成最终的程序,当然在最终程序执行的时候,自然不会执行任何strb++或++strb了。
参考: http://zhidao.baidu.com/link?url=c3X2_o8ELz-yHeQI30r5oSpvsWnyRjM2M0tINXY3Qk_qj8ixZCegN--f5i6spQmvvXY2u3G62_hBk3q1Ykbm6qf5i6spQmvvXY2u3G62_hBk3q1Ykbm6q


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值