c语言几道易错题

1、猜其打印结果

cpp 复制代码
int main()
{
	int i = 0;
	i--;

	if (i > sizeof(i))
		printf(">");
	else
		printf("<");


	return 0;
}

结果是">" ,因为sizeof操作符的结果其实是无符号型,这个时候signed要进行算术转换,变成unsigned,-1【1111111111111111111111111111111】在无符号int中对应的是极大的值,远大于1

所以结果是">"

一个表达式中既有有符号又有无符号,会将有符号转换为无符号,进行运算,就是向上转换

|-----|--------------|----------|-------------------|-------|--------|-------------|
| int | unsigned int | long int | unsigned long int | float | double | long double |
[算术转换]

--------------------------------------------------------------------------------------------------------------------------->>>

向上提升

2、求a,b,c 的值

cpp 复制代码
int main()
{
	int a, b, c;
	a = 5;
	c = ++a;
	b = ++c, c++, ++a, a++;
	b += a++ + c;

	printf("%d %d %d\n", a, b, c);

	return 0;
}

=的优先级高于 , +=的优先级比 + 低

9 23 8

3、求a的值

cpp 复制代码
int a = 1;

void test()
{
	int a = 2;
	a += 1;
}

int main()
{
	test();
	printf("%d", a);

	return 0;
}

结果是 1

在函数test中的 a 是咱们定义的局部变量,当局部变量和全局变量冲突是,在局部的时候优先局部变量,咱们已经在局部声明它是个局部变量,所以无论它在局部如何变化,都不影响全局变量a

如果我们把test()中的 int a=2中的int 去掉,答案就变成了 3,因为这个时候a没有声明是局部变量,我们在使用的时候,就认为是是全局变量的那个a

4、关于指针说法,下列哪个正确?

A、int* const p 与 int const *p 等价

B、const int *p与int *const p 等价

C、const int*p与int const *p等价

D、int *p[10] 与 int(*p)[10]等价

a、左const修饰 p ;右修饰*p,不等价

b、与上面相反

c、都是修饰*p,不能随意改变*p指向的对象 √

d、int* p[10] 与 int (*p)[10]不等价

前者定义了一个指针数组,其中包含10个指针(地址)

后者定义了一个指针p,指向了一个包含10个int型元素的数组

相关推荐
程序员-King.4 小时前
day158—回溯—全排列(LeetCode-46)
算法·leetcode·深度优先·回溯·递归
月挽清风5 小时前
代码随想录第七天:
数据结构·c++·算法
小O的算法实验室5 小时前
2026年AEI SCI1区TOP,基于改进 IRRT*-D* 算法的森林火灾救援场景下直升机轨迹规划,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
小郭团队6 小时前
2_1_七段式SVPWM (经典算法)算法理论与 MATLAB 实现详解
嵌入式硬件·算法·硬件架构·arm·dsp开发
充值修改昵称6 小时前
数据结构基础:从二叉树到多叉树数据结构进阶
数据结构·python·算法
Deepoch7 小时前
Deepoc数学大模型:发动机行业的算法引擎
人工智能·算法·机器人·发动机·deepoc·发动机行业
csdn_aspnet7 小时前
C 语言的优雅回归:从零手造数据结构
c语言·数据结构
浅念-7 小时前
C语言小知识——指针(3)
c语言·开发语言·c++·经验分享·笔记·学习·算法
Hcoco_me7 小时前
大模型面试题84:是否了解 OpenAI 提出的Clip,它和SigLip有什么区别?为什么SigLip效果更好?
人工智能·算法·机器学习·chatgpt·机器人
BHXDML8 小时前
第九章:EM 算法
人工智能·算法·机器学习