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

来源:互联网 发布:doodle jump java 编辑:程序博客网 时间:2024/05/17 22:09

#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


0 0