C语言_常见知识点

这篇博客涵盖了C语言的多个知识点,包括printf函数的返回值、智力题、结构体内存占用、函数参数计算与入栈顺序、浮点数比较、头文件避免重复包含、函数式宏、#include语法以及函数指针和指针函数的应用等。还讨论了字符'0'、数字0和''的区别,并提及了sqlite3.h中的宏定义SQLITE_API。
摘要由CSDN通过智能技术生成

一、关于printf函数

1.printf函数是有返回值的,printf返回输出字符的个数。

#include<stdio.h>
int main()
{
	int i = 43;
	printf("%d\n", printf("%d",printf("%d",i)));//printf函数返回值为输出字符的个数//4321
	return 0;
}

2.下面这题来自牛客网,考察知识点为函数参数传递方式,但是因为用到了printf函数,就放到这里一并说。

求下列程序的输出结果

#include<stdio.h>

int f(int a, int b, int c)
{
	return 0;
}

int main()
{
	return f(printf("a"), printf("b"), printf("c"));
	return 0;
}

未定义行为。

二、智力题

1.寝室有6个同学打dota,分为对立的两方,一方是天灾军团,一方是近卫军团。现请你设置赛程以及每场的对阵(每方最少1人、最多5人),请问至少得进行多少场比赛,才能使得赛程结束后每位同学都和其他同学做过对手(3)

解答:这题当时做对了,是试出来的。看了一下网友的解答,感觉很不错。

用0,1来表示每个同学位于哪一方,0表示天灾军团,1表示近卫军团。000表示这个同学3次都处于天灾军团,001表示两次处于天灾,一次处于近卫。000,001,010,011,100,101,110,111,八个二进制最少有一个数不同,表示处于对抗。这题相当于几位二进制,可以表示5个不同的数。

2.从一副标准扑克牌中抽牌,抽到黑色牌就继续抽(不取出),直至抽到红色牌,则停止。按照概率算,平均下来每次能抽到多少张黑牌?(也就是三国杀中甄姬的洛神技能,得到牌数的期望值)

 

1
1.2
0.8
0.9

解答:做的时候,2了,没有看到抽到的黑色牌继续放回牌堆。其实这题很简单,只不过我也玩三国杀,觉得很有意思就放在这里了。

E=1/4+2/8+3/16+4/32+...+n/(2^n+1)

=1

三、C语言中结构体占用内存问题

转载:https://www.cnblogs.com/kl2blog/p/6908048.html

之前对结构体占用内存一直很混乱,到底是按照哪个变量类型计算内存?还是怎么计算?下面先看一个例子:

struct str1
{
	char a;
	int b;
	float c;
	double d;
};

str1这个结构体占用的内存是多少呢?如果用变量类型直接想加,得到的结果是17,但显然不是这样的。这个程序运行的正确结果是24.为什么呢?

  因为为了CPU能够快速访问,提高访问效率,变量的起始地址应该具有某些特性,这就是所谓的“对齐”。比如4字节的int型变量,那它的起始地址就应该在4字节的边界上,即起始地址可以被4整除。

  内存对齐的规则很简单:

  1.起始地

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值