C语言第四节课课程总结
  uUWKQE7Avyk4 2023年11月02日 34 0

一.选择题

1.关于C语言关键字说法正确的是:()

A.关键字可以自己创建

B.关键字不能自己创建

C.关键字可以用作变量名

D.typedef不是关键字


答案:B,A选项错误原因:关键字是由编译器定义的,不能由自己定义或者创建,B选项错误原因:关键字不能用作变量名,否则编译器将报错,D选项错误原因:typedef为类型别名的关键字,其作用是为名称复杂的数据类型定义一个简单的别名


2.用在switch语句中的关键字不包括哪一个:()

A.continue

B.break

C.default

D.if


答案:A,这个将在下面详细进行讲解


3.以下不是C语言关键字的是:()

A.int

B.define

C.struct

D.break


答案:B,A选项错误原因:int为整型,属于C语言的关键字,C选项错误原因:struct用于创建结构体,属于C语言关键字,D选项错误原因:break用于终止循环,属于C语言关键字


4.以下代码运行的结果是什么:()

#include<stdio.h>
int sum(int a)
{
int c = 0;
static int b = 3;
c+=1;
b+=2;
return (a+b+c);
}
int main(void)
{
int i;
int a = 2;
for(i = 0;i<5;i++)
{
printf("%d\n",sum(a));
}
}

A. 4 8 10 12 14

B. 8 10 12 14 16

C. 10 12 14 16 18

D. 12 14 16 18 20


答案:B,首先声明并初始化了变量c,使得c=0,随后声明并初始化了一个静态变量b,b=3,随后将变量c加上1 , 变量b加上2 ,随后返回a+b+c的值,其中a=2,则可以通过计算得出 第一次输出的值是8

故选B,如图所示:

C语言第四节课课程总结_结构体


二. 指针的补充

1.int* 是一个指针变量的数据类型

int* 中的 * 告诉我们变量p是指针变量,p所指向的对象的数据类型为int整型

p 中的 * 与int中的 * 不一样,它代表的是解引用操作符/间接访问操作符


2.同时我们也需要学会利用sizeof操作符计算指针变量所占用的内存大小,如以下代码:

#include<stdio.h>
int main(void)
{
	printf("%d\n",sizeof(int*));
	printf("%d\n",sizeof(float*)); 
	printf("%d\n",sizeof(double*));
	printf("%d\n",sizeof(char*));
	getchar();
	return 0;
}

在win32环境下运行则输出的全都是4,如果改为x64平台,则输出的内容全都是8


三.结构体

常见类型:int char double

但是我们日常生活中需要表达很多的复杂对象,不能简单的用数据类型去表示,比如人,需要有名字,性别,身高,等等,这时候需要使用结构体来描述,结构体需要自己进行创建,使用struct结构体关键字来进行创建,如使用以下代码来存储书名、售价的信息

#include<stdio.h>

struct Book

{

	char name[20];

	unsigned int price;

};  

int main(void)

{

	struct Book book1 = {"C语言设计",110};

	printf("书名:%s\n",book1.name);

	printf("售价:%d\元n",book1.price);

	getchar();

	return 0;

}

代码解析:首先创建了一个名称为Book的结构体,结构体中声明了字符串数组变量name,其大小为20

声明了无符号整型变量price,在代码17行使用struct()结构体函数创建了变量book1,并给其赋值,赋值时需要和上方的成员类型一一对应,随后调用printf()函数进行输出,注意!当输出书名的时候,我们需要用到结构体中的name成员,所以我们需要输入 book1.name,当需要输出售价的时候我们需要用到结构体中的price成员所以需要输出 book.price

讲完代码的大意我们再来看看使用struct函数的时候有哪些是需要注意的

1.在使用struct创建结构体时需要注意大括号的后面是需要有 ; 作为结束标识

2.struct结构体函数的本质是利用结构体类型---->创建该类型的结构体变量

3.struct结构体中的成员数据是可以进行改变的,如以下代码:

#include<stdio.h>
struct Book
{
	char name[20];
	unsigned int price;
};  
int main(void)
{
	struct Book book1 = {"C语言设计",110};
	printf("书名:%s\n",book1.name);
	printf("售价:%d\元n",book1.price);
  book1.price = 10;
  printf("打折后的售价:%d\n",book1.price);
	getchar();
	return 0;
}

我们可以看到对book1变量中的price成员进行修改后,book.price的值可以发生改变,打折后的售价变成了10

4.将结构体变量的地址以指针的形式进行存储

#include<stdio.h>

struct Book

{

	char name[20];

	unsigned int price;

};  

int main(void)

{

	struct Book book1 = {"C语言入门",100};

	struct Book* pb = &book1;

	getchar();

	return 0;

}

这里是struct Book* 是变量的类型,它定义了一个指针变量pb,指针pb指向的是book1,同时我们也可以使用pb来输出书名和价格,如以下代码:

#include<stdio.h>

struct Book{

	char name[20];

	unsigned int price;

};

int main(void)

{

	struct Book book1 = {"C语言入门",100};

	struct Book* pb = &book1;

	printf("书名:%s\n",(*pb).name);

	printf("售价:%d元\n",(*pb).price);

	getchar();

	return 0;

}

我们使用*解引用操作符将变量pb进行解引用操作,再打印出结构体的成员,同时还有一种更加简洁的方法,如以下代码:

#include<stdio.h>

struct Book{

	char name[20];

	unsigned int price;

};

int main(void)

{

	struct Book book1 = {"C语言入门",100};

	struct Book* pb = &book1;

	printf("书名:%s\n",pb->name);

	printf("售价:%d元\n",pb->price);

	getchar();

	return 0;

}

利用 -> 打印出书名与价格,这时候pb已经是一个指针了,所以可以直接使用 -> 打印出book1的name结构成员,同理使用 -> 可以打印出book1的price结构成员

我们再来看一下 .  与 ->  操作符

当我们需要打印出结构体变量的成员时候,我们可以用 . 来找到

-> 则表示结构体指针,用于指向结构体成员

补充:如果需要更改书名则可以使用strcpy()函数,全程string copy(字符串拷贝),如需要将C语言入门改成C++则可以使用以下代码

#include<stdio.h>

struct Book{

	char name[20];


};

int main(void)

{

	struct Book book1 = { "C语言入门"};

	strcpy(book1.name, "C++");

		printf("Book name=%s\n", book1.name);

	getchar();

	return 0;

}

strcpy()函数为库函数,如果需要使用strcpy()函数,则需要声明头文件string.h

这时候我们运行程序就会发现书名从原先的C语言入门变成了C++

                                                                                                      2023/7/17

                                                                                                        王起舟


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  QlMN2j7pChGO   2023年11月02日   27   0   0 操作符
  onyKAAZLmqqe   2023年11月02日   49   0   0 System操作符子类
  X5zJxoD00Cah   2023年11月02日   42   0   0 操作符
uUWKQE7Avyk4