C语言易错基础知识汇总 您所在的位置:网站首页 内存32767 C语言易错基础知识汇总

C语言易错基础知识汇总

2024-05-25 10:19| 来源: 网络整理| 查看: 265

以下整理自湖南大学考研真题。

2010年

1、C语言源程序文件经过C编译程序编译连接之后生产一个后缀为“.exe”的文件

 

2、以下选项中不正确的整型常量是()

A、12L    B、-10    C、1,900    D、123U

 

3、表达式_____不符合C语言语法,若变量以正确定义并赋值

A、4&&3    B、+a    C、a=b=5    D、int(3.14)

 

4、在字符数组str[]="hello\nworld\n"中,‘\n’为一个字符,该数组长度为13

 

5、结构体的赋值:

struct node{ char s[10]; int k; }p[4];

p[0]->k=2正确,p[0].s="abc"错误。

 

6、C语言中基本的数据类型有 整型、字符型、浮点型

 

7、C语言中普通整型变量的类型说明符为 int ,在内存中占 2 字节,有符号普通整型的数据范围是 -32768~32767(-2^15~2^15-1)

 

8、原码反码和补码:(8位,以-35为例)

原码

最高位存放符号, 正数为0, 负数为1。

例:-35 --> 10100011

反码

正数的反码是其本身;

负数的反码是在其原码的基础上, 符号位不变,其余各个位取反。

例: 10100011 --> 11011100

补码

正数的补码就是其本身;

负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1。 (即在反码的基础上+1)

例:11011100 --> 11011101

注:考试给的答案是16位。

 

9、所谓“指针”就是 地址 ,“&”运算符的作用是 按位与或取地址 ,“*”运算符的作用是 乘积或指针

 

10、文件:

建立一个名为“myfile”的文件:

FILE *fp; fp=fopen("myfile.txt", "w");

要记住最后要关闭文件流:

fclose(fp);

 

11、sizeof()计算当前字符数组总元素个数,包括'\0';strlen()不包括'\0':

char s[9] = "computer"; printf("%d\n",sizeof(s)); printf("%d\n",strlen(s));

12、从键盘读取字符串的方法:

char str[100]; gets(str); puts(str);

 

2011年

1、函数参数传递时传值与传地址的区别:

传值把实参的值赋给形参,对形参的值进行修改不会影响到实参。传地址传递的是地址,实参和形参指向同一对象,改变形参的值实参的值也会相应改变。

 

2、#include  和 #include "filename.h"的区别:

从标准头文件的位置引用头文件。(标准或系统提供的头文件)""引用的是用户程序目录中相对路径里面的头文件。(程序自己的头文件)

 

3、sizeof()的使用:

详细可参考:https://blog.csdn.net/u011677209/article/details/52837065

#include #include void fun(char str[100]){ printf("3,%d\n",sizeof(str)); } int main() { char str[]="Hello"; char *p=str; printf("1,%d\n",sizeof(str)); printf("2,%d\n",sizeof(p)); fun(str); return 0; }

 如上程序,在32位系统中,输出结果为:

1,6 2,4 3,4

 (1)sizeof()的作用是返回一个对象或者类型所占的内存字节数,str数组中,加上结束符'\0'一共是6个字符,char类型占1个字节,因此共6字节。

(2)指针p记录了另一个对象str的地址,等于计算机内部地址总线的宽度。所以在32位计算机中 ,一个指针变量的返回值必定是4(注意结果是以字节为单位)。

(3)在fun()函数中,数组是“传址”的,只会把实参的地址传进去,而不会分配一个大小为100的数组,所以它实际上相当于是一个指针,因此结果也为4。

 

4、分析下面的程序:

#include #include char *GetMemory(){ char p[]="hello world"; return p; } void Test(){ char *str=NULL; str=GetMemory(); printf(str); } int main() { Test(); return 0; }

函数GetMemory()中返回的p是其局部变量,在该函数执行完“return p;”后p就被释放掉了,因此在Test()中str并没有获取到p的值,输出的是乱码。

 

5、有序数据序列的查找——二分法:

#include //递归算法 int recurbinary(int *a, int key, int low, int high) { int mid; if(low > high) return -1; mid = (low + high)/2; if(a[mid] == key) return mid; else if(a[mid] > key) return recurbinary(a,key,low,mid -1); else return recurbinary(a,key,mid + 1,high); } //非递归算法 int binary( int *a, int key, int n ) { int left = 0, right = n - 1, mid = 0; mid = ( left + right ) / 2; while( left < right && a[mid] != key ) { if( a[mid] < key ) { left = mid + 1; } else if( a[mid] > key ) { right = mid; } mid = ( left + right ) / 2; } if( a[mid] == key ) return mid; return -1; } int main() { int a[] = {1,2,3,4,5,6,7,8,9,12,13,45,67,89,99,101,111,123,134,565,677}; printf("%d\n",recurbinary(a,45,0,20)); printf("%d\n",binary(a,3,21)); return 0; }

原理:

(1)定义3个变量left, right, mid分别表示有序数组查找部分的起始位、结束位和中间位,若元素总个数为偶数,则中间位表示中间左边的那一位。

(2)判断mid和查找值key的大小关系,若keymid则在[mid+1,right]范围内查找。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有