C语言操作符详解(3)

125 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第18天,点击查看活动详情

单目操作符

//单目操作符就是只有一个操作数的操作符!
+   -   !   sizeof()   ++  --  ~  *  (类型)

+ -

这里的+ -都是单目操作符,并不是算数操作符中的+-!

    a=-5;  //-5这里的-指的是单目操作符!
    b=+5; //+5 +可以省略!

逻辑反操作符

 while(a!=0)   //这里就是!逻辑反操作符
 {
 	count++;   //a不为0count++;
 }
 while(!a)
 {
  count++;   //a为0count++;
 }

sizeof 是否感到很诧异,sizeof居然是操作符! sizeof是比较特殊的一个操作符,并不是函数! 我们知道sizeof可以计算一个变量和类型的所占空间内存大小!

int main()
{
    int a = -10;
    int* p = NULL;
    printf("%d\n", !2);
    printf("%d\n", !0);
    a = -a;
    p = &a;
    printf("%d\n", sizeof(a));
    printf("%d\n", sizeof(int));
    printf("%d\n", sizeof a);      //这样写行不行?
    printf("%d\n", sizeof int);//这样写行不行?
	return 0;
}

在这里插入图片描述 可以看到当sizeof计算一个类型时,不添加括号,就会报错,然而计算一个变量的大小时却可以省略括号! 总结:sizeof计算类型所占内存大小时,括号不可省略。sizeof(类型),计算变量所占内存大小时,sizeof(变量)sizeof变量

将错误更改一下,看一下运行结果!在这里插入图片描述 sizeof和数组 我们知道sizeof可以计算变量的空间大小,所以我们经常通过sizeof计算一个数组的元素个数! 公式:sizeof(数组)/sizeof(数组的一个元素)

#include <stdio.h>
void test1(int arr[])
{
    printf("%d\n", sizeof(arr));//(2)
}
void test2(char ch[])
{
    printf("%d\n", sizeof(ch));//(4)
}
int main()
{
    int arr[10] = {0};
    char ch[10] = {0};
    printf("%d\n", sizeof(arr));//(1)
    printf("%d\n", sizeof(ch));//(3)
    test1(arr);
    test2(ch);
    return 0;
}

问: (1)、(2)两个地方分别输出多少? (3)、(4)两个地方分别输出多少?

我们先通过自己计算一下! 计算结果! (1)40 (2) 40 (3)10 (4) 10 而运行结果! 在这里插入图片描述 可以看到,运行结果并不是那样! 我们在思考一下这个结果,为啥结果会是4? 我们明明是将数组,直接传参过去 ,而通过sizeof计算的内存大小却不是,难道我们只传参了一个地址过去? 在这里插入图片描述 我们调试一下,发现就是假设的这样,数组传参并没有将整个数组传参过去,而是传参了一个指针! 而我们在x86也就是32位平台下,指针所占内存空间大小为4个字节。

++ --


 //前置++和--:
    #include <stdio.h>
    int main()
    {
        int a = 10;
        int x = ++a;
        //先对a进行自增,然后对使用a,也就是表达式的值是a自增之后的值。x为11。
        int y = --a;
        //先对a进行自减,然后对使用a,也就是表达式的值是a自减之后的值。y为10;
        return 0;
    }
    
    //后置++和--
    #include <stdio.h>
    int main()
    {
        int a = 10;
        int x = a++;
        //先对a先使用,再增加,这样x的值是10;之后a变成11;
        int y = a--;
        //先对a先使用,再自减,这样y的值是11;之后a变成10;
        return 0;
    }

总结: 前置++,--先进行自加操作,再使用! 后置++,--先使用再进行自加操作!