函数指针/逗号表达式/不用if语句完成的字母输出题
1.函数指针用的不是那么频繁的一个操作:
下面是代码演示:
在这个int (*jump)(int);中 jump是这个指针变量名称,第一个int是指针类型,第二个int是指的这个指针所指的函数参数是int类型的。
#include <stdio.h>
// 定义一个符合函数指针要求的函数
int add(int num) {
return num + 1;
}
int main() {
int (*jump)(int); // 声明函数指针
jump = add; // 将函数指针指向add函数
int result = jump(5); // 通过函数指针调用函数
printf("结果是: %d\n", result);
return 0;
}
2.逗号表达式:
在 C 语言中,逗号表达式是由逗号运算符 ,
连接起来的多个表达式。其一般形式为:
表达式1, 表达式2, …, 表达式n
基本特性
- 运算顺序:逗号表达式从左到右依次计算各个子表达式的值。例如对于
a = 3, b = 5, c = a + b
,先计算a = 3
(此时a
的值变为 3 ),接着计算b = 5
(b
的值变为 5 ),最后计算c = a + b
(c
的值为 8 )。 - 返回值:整个逗号表达式的值是最后一个子表达式的值。比如在
(x = 3 * 5, x * 4), x + 5
中,先计算x = 3 * 5
(x
变为 15 ),接着x * 4
的结果被忽略,因为逗号表达式取最后一个子表达式的值,所以最后计算x + 5
,整个表达式的值为 20 (前提是x
在此之前已正确声明 )。
常见用途
- 在循环中同时执行多个操作:
for (int i = 0, j = 10; i < 5 && j > 5; i++, j--) {
// 循环体
printf("i = %d, j = %d\n", i, j);
}
这里在 for
循环的初始化部分 int i = 0, j = 10
和更新部分 i++, j--
使用逗号表达式,能够同时对多个变量进行初始化和更新操作。
3.笔试题 :
--不用if语句, 将一个字母组成的字符串,计算出每个字母的出现次数,按照字母大小升序输出。
这道题也用到了逗号表达式
void countArray(char ch[])
{
int array[26] = { 0 };
int len = strlen(ch);
for (int i = 0; i < len; i++)
{
char c = tolower(ch[i]);
int index = c - 'a';
array[index]++;
}
//逗号表达式和三目运算符
int j = 0;
while (j < 26)
{
((array[j] > 0) ? printf("%c:%d", j +'a', array[j]):0, j++);
}
}
--合并降序链表:
struct LNode
{
int val;
struct LNode* next;
};
struct LNode* merge_list(struct LNode* L1, struct LNode* L2)
{
struct LNode* dummy;
dummy->next = NULL;
struct LNode* tail = dummy;
while (L1&&L2)
{
if (L1->val >= L2->val)
{
tail->next = L1;
L1 = L1->next;
}
else
{
tail->next = L2;
L2 = L2->next;
}
tail = tail->next;
}
tail->next = (L1 != NULL) ? L1 : L2;
return dummy->next;
}