> 文档中心 > C语言刷题笔记之基础不牢地动山摇 <一>

C语言刷题笔记之基础不牢地动山摇 <一>


  个人主页:欢迎大家光临——>沙漠下的胡杨

  各位大帅哥,大漂亮

 如果觉得文章对自己有帮助

 可以一键三连支持博主

 你的每一分关心都是我坚持的动力

 

 ☄: 本期重点: 一些C语言刷题易错点总结

  希望大家每天都心情愉悦的学习工作。 

一. 关于全局变量

二.关于scanf

三.指针练习

 四. "A"和 'A' 的区别

五.关于数据的存储

六.关于二维数组

七.运算符优先级


一. 关于全局变量

全局变量定义之前无法使用吗?

extern int a;int main(){printf("a = %d\n", a);return 0;}int a = 10;

我们看一下,首先int a 的定义是在main函数之后的,通过声明是可以使用的。

本质:首先全局变量在程序运行时就已经被分配了内存空间,所以定义前可以被使用。

二.关于scanf

在横线处加入合适的输入语句,在程序运行时期从键盘输入:How are you?,最后输出的结果是:  How are you?How

int main(){char *a = "How are you?", b[20];    ——————————————————————————————printf("%s %s\n", a, b);return 0;}

A:gets(b)       B:scanf("%s",b)

  gets的结束是换行( '\n' )

 scanf结束是空格 回车 Tab键,也就是一个连续的字符。

所以应该选择 B:scanf("%s",b)

三.指针练习

int a[10] = { 1, 2, 3, 5, 5, 6, 7, 8, 9, 10 };int x = 0;int *pa = a;

有上面的定义,则下面的赋值中,哪一个不是把数组下标为3的元素赋值给x呢?

A:x = pa[3]                            B:x= *(a+3)

C:  x =a[3]                                D:x = *pa+3

分析下:

A:正确,pa虽然是指针,但是可以通过数组的形式访问。

B:  正确 ,a是首元素地址,先后移动3个int的大小,刚好访问到下标为3的元素,在解引用赋值

C: 正确,通过数组形式,把下标为3的值赋值给x了。

D: 错误,首先是直接解引用了a就是数组的首元素,然后在+3,这个是不正确的。

 四. "A"和 'A' 的区别

首先字符 'A' 是一个单独的字符,而"A"是两个字符,A 和 \0,他们是不一样的。

五.关于数据的存储

直接看代码:

unsigned short A = 10;printf("~A = %u\n", ~A);char c = 128;printf("c = %d\n", c);

我们分析下A:

存入A空间中是00000000 00001010 , 然后对A进行按位取反变成11111111 11110101

然后按照%u打印,就是按照无符号整形打印就是11111111 11111111 11111111 11110101

打印结果就是4294967285

接着分析c :

c是128,存入空间为10000000,是%d打印,所以整形提升为

11111111 11111111 11111111 10000000,这是补码,

转化为反码10000000 000000000 00000000 01111111

原码为10000000 000000000 00000000 10000000,

最后打印就是-128

六.关于二维数组

下面输出的结果:

char arr[2][4];strcpy(arr[0], "you");strcpy(arr[1], "me");arr[0][3] = '&';printf("%s \n", arr);

我们先分析下:

第一次拷贝后放得数据为,

 第二次拷贝后放得数据为,

 这时候我们如果直接以%s打印的话,那么就会打印到 '\0'结束,但是我们进行了赋值操作,把arr[0][3]中 '\0',替换为 ' $ ', 所以结果为 " you&me "。

七.运算符优先级

*p++ 是自增指针 p 还是自增指针 p 所指向的内容?

看个代码:

int a = 10;int *p = NULL;int **pp = NULL;p = &a;pp = &p;printf("%d\n", *pp);printf("%d\n", *p++);printf("%d\n", *pp);

我们直接运行下可以得出,是自增的是指针变量p。

 
有两个流派的解释:

1.在C和指针中解释为,同优先级下,结合性为从右向左。

2.在优先级图示上,为后置++的优先级高于解引用( * )。

这个我们讨论区来讨论吧!

C语言刷题笔记之基础不牢地动山摇 <一> 创作打卡挑战赛 C语言刷题笔记之基础不牢地动山摇 <一> 赢取流量/现金/CSDN周边激励大奖