C基础第18课--三目运算符和逗号表达式

学习自狄泰软件学院唐佐临老师C语言课程,文章中图片取自老师的PPT,仅用于个人笔记。


实验1:三目运算符最后返回的是一个值,而不是变量本身,不可以作为左值使用。但是可返回地址,操作地址。
实验2:三目运算符的返回类型,有疑问,需要提问
实验3:逗号表达式
实验4:逗号表达式的应用,用一行代码实现 strlen,递归调用!!!牛皮!!!


在这里插入图片描述
实验1:三目运算符最后返回的是一个值,而不是变量本身,不可以作为左值使用。但是可返回地址,操作地址。

#include <stdio.h>

int main()
{
    int a = 1;
    int b = 2;
    int c = 0;
    
    c = a < b ? a : b;
    
    (a < b ? a : b) = 3;
    
    printf("%d\n", a);
    printf("%d\n", b);
    printf("%d\n", c);
    
    return 0;
}

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
实验2:三目运算符的返回类型,有疑问,需要提问

printf( “%d\n”, sizeof(c ? c : s) );//4 int ??? 不应该是 short 2吗

#include <stdio.h>

int main()
{   
    char c = 0;
    short s = 0;
    int i = 0;
    double d = 0;
    char* p = "str";
        
    printf( "%d\n", sizeof(c ? c : s) );//4 int ??? 不应该是 short 2吗
    printf( "%d\n", sizeof(i ? i : d) );//8
    printf( "%d\n", sizeof(d ? d : p) ); // error 类型不匹配

    return 0;
}

在这里插入图片描述

在这里插入图片描述

实验3:逗号表达式

#include <stdio.h>

void hello()
{
    printf("Hello!\n");
}

int main()
{   
/*
二维数组的初始化可以按行分段赋值,也可按行连续赋值。

例如,对于数组 a[5][3],按行分段赋值应该写作:
int a[5][3]={ {80,75,92}, {61,65,71}, {59,63,70}, {85,87,90}, {76,77,85} };
按行连续赋值应该写作:
int a[5][3]={80, 75, 92, 61, 65, 71, 59, 63, 70, 85, 87, 90, 76, 77, 85};
这两种赋初值的结果是完全相同的。

这里的写法是逗号表达式,而且逗号表达式的值为最后一个子表达式的值,则变为
2
5
8
*/
    int a[3][3] = {
        (0, 1, 2),
        (3, 4, 5),
        (6, 7, 8)
    };
    
    int i = 0;
    int j = 0;
    

//while 下面是一个逗号表达式
    while( i < 5 )
        printf("i = %d\n", i),
        
    hello(),
    
    i++;
        
    for(i=0; i<3; i++)
    {
        for(j=0; j<3; j++)
        {
            printf("a[%d][%d] = %d\n", i, j, a[i][j]);
        }
    }

    return 0;
}

在这里插入图片描述

在这里插入图片描述

实验4:逗号表达式的应用,用一行代码实现 strlen,递归调用!!! 牛逼!!!

#include <stdio.h>
#include <assert.h>

int strlen(const char* s)
{  
	//利用逗号表达式式,首先判断是不是空指针,然后递归调用,内容是首先判断是不是空字符串,然后用子串长度加一就是总长。
    return assert(s), (*s ? strlen(s + 1) + 1 : 0);
}

int main()
{   
    printf("len = %d\n", strlen("Delphi"));
    printf("len = %d\n", strlen(NULL));
    
    return 0;
}

在这里插入图片描述

在这里插入图片描述

发布了192 篇原创文章 · 获赞 100 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/LinuxArmbiggod/article/details/103655462