东北大学cs专业课复习笔记——c语言

笔记所有内容参考《东大红皮书》,由个人整理。

  • 指针p指向了数组a,请写出至少3种数组a第i个元素的方式。
1. a[i - 1] 2. p[i - 1] 3. *(a + i - 1) 4. *(p + i - 1)
  • 如果想通过一个函数获得多个返回值,请写出至少2种实现方法。
//1. 变量地址方式
void func(int* a, int* b) {
    *a = 1;
    *b = 2;
}

//2. 全局变量方式
int a, b;
void func() {
    a = 1;
    b = 2;
}
  • 举例说明结构体和联合体的区别。
/*
在结构体中各成员有各自的内存空间,一个结构体变量的长度大于等于各成员长度之和;
而在联合体中,各成员共享一段内存空间,一个联合体的长度等于各成员中最长的长度。
结构体st占5个字节,而联合体un占4个字节。
*/
struct st {
    int i;
    char c;
};

union un {
    int i;
    char c;
};
  • 写出define与typedef的区别。
/*
1. define是一种宏定义,而typedef是一种类型定义;
2. define是在预编译时进行简单的替换,不做正确性检查,而typedef是在编译期间进行类型定义,编译器会做正确性检查。
*/
#define INT int
typedef int INT;
  • 写出说明2种判断字符串结束的方法。
//1. c风格字符串方式,字符串最后一个字符为'\0'
while(str[i] != '\0'){ ++i; }

//2. 字符串长度方式。
for(i = 0; i < strlen(str); ++i) {}
  • 当函数的形参为数组时,请写出对应的2种实参形式,举例并解释。
//1. 形参为一维数组
void func(int array[], int length);
int a[2];
int* a;

//2. 形参为一维指针数组
void func(int* array[], int length);
int* a[2];
int** a;

//3. 形参为二维数组
void func(int array[][3], int length);
int a[2][3];
int (*a)[3];
  • 函数的形参为指针,求对应的实参的2种表示方式。
//1. 实参为变量
int i;
func(&i);

//2. 实参为指针
int* p;
func(p);
  • 函数声明的作用,在什么情况下自定义函数不需要函数声明。
/*
1. 提前告知编译系统,函数的名字、参数类型、参数个数、参数顺序和返回值类型等信息,
以便在调用该函数时系统按此进行检查;
2. 自定义函数定义写在调用该函数的语句之前。
*/

猜你喜欢

转载自www.cnblogs.com/vergilwu/p/11666389.html
今日推荐