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 *p10 与 int(*p)10等价

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

b、与上面相反

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

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

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

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

相关推荐
血色橄榄枝12 小时前
基于用户注册信息的关键词检测挑战赛「Datawhale AI 夏令营」
人工智能·算法·机器学习
天空'之城12 小时前
C 语言工业级通用组件手写 04:阻塞队列
c语言·嵌入式开发·阻塞队列·多线程开发
c2385613 小时前
第二篇:《测试指挥官:可视化单题自测框架(含 assert 实操)》
java·数据库·c++·算法·安全性测试
六点_dn14 小时前
Linux学习笔记-printf命令
linux·运维·算法
遥感知识服务15 小时前
Sentinel-1 + DEM + FwDET + 随机森林:从快速水深初估到多因子误差修正
算法·随机森林·sentinel
来一碗刘肉面15 小时前
顺序表与链表的比较
数据结构·算法·链表
alphaTao15 小时前
LeetCode 每日一题 2026/7/13-2026/7/19
算法·leetcode
nnerddboy15 小时前
脑电信号处理实战 03 | 运动想象脑机接口入门:ERD/ERS、CSP 空间滤波与左右拳想象解码
算法·信号处理
dtq042415 小时前
C语言-结构体详解
c语言·开发语言·学习
QN1幻化引擎16 小时前
Dalin L — 我造了一门支持中文编程的语言,完整移植到 Rust 了
人工智能·算法·机器学习