关于c语言的一点问题

2024-11-22 22:09:09
推荐回答(5个)
回答1:

可以

#include的作用就是包含文件

只不过通常包含的.h文件中只有声明文件,并不包含实现。(事实上C++中内联函数一般都实现在.h里)作用只是告诉编译器:有这么个函数,是这个样子的。最后连接器才会把函数的实现和客户代码连接到一起,生成可执行文件。

但是注意,声明可以有多次,但是实现只能有一次。也就是不可以在include "sth.c"之后又编译了sth.c并连接,会出错。

最好的办法还是把声明放到.h里,包含.h,然后分段编译和连接

回答2:

可以

不过,最好写个.h文件

回答3:

link时会报“重定义”的错误。
假设你是在 calling.c文件里include "sample.c".
分别编译了 calling.c和sample.c,生成calling.o sample.o(或者叫*.obj,*.co,因编译器而异),然后将上述.o文件link时,会报重定义的错误,因为sample.c中定义的那些函数(static函数除外)的函数体在两个.o文件中都出现了。

注意:include一个文件相当于把文件内容完全拷贝到include处。

假如你link时不带上sample文件,则link无问题。但你也不应该这么做。试想:如果将来另外一个文件,比如calling2.c也要调用sample.c中的函数呢?难道你在calling2.c中也去include sample.c?若那样,你又将在link时出现重复定义的错误。

因此,应该用h文件声明函数,并且让calling.c和sample.c都include它

回答4:

1.给main函数传递的参数,用于接受命令行参数.你在DOS执行程序的时候应该见过dir
-p这种形式,还有copy
a
b这样的,命令就是编译的那个exe或者com,而它后面的就是它的参数,在C语言中用argc接收参数的个数,argv接收参数,它是个字符指针数组,如copy
a
b,则argc=3,argv[0]="copy",argv[1]="a",argv[2]="b"
2.只要char*
s之后,s就是一个字符指针,s[0]就是*s,而s是一个地址,所以*s和*(s+0)等价,这里和i没有关系.

回答5:

您好!
c语言中的链表是一种很重要的数据结构。所谓“数据结构”是指数据的逻辑结构、数据的存储结构以及定义在它们之上的一组运算。而链表是数据的存储结构中的一种,又称链式存储。它能够动态的进行存储分配。举个例子来说,如果要存储一个班级的学生信息,但有可能班级人数较多如100,也有可能较少如30,如果我们用顺序存储方式来解决,即用数组来存放,这时如果事先难以确定一个班的最多人数,则必须把数组定义的足够大,以能存放任何班级的人数,这时要在内存中占用一整块连续的这么大的空间,当存储的数据少时,这显然会浪费空间。但链表则没这缺点,它根据需要动态开辟可不连续的内存单元。
由于内存单元不连续,怎样才能从第一个数据找到第二个数据呢(实现顺序逻辑结构),这时在链表的结点中,必须要有一个指针变量,即:一个结点中除包含本身的数据外,应包含一个指针变量,用它存放下一结点的地址。
可以设计这样一个结构体类型:
struct
student
{int
num;
int
score;
struct
student
*next;}
其中struct
student
*next
的next就是指向本身这种结构体类型的指针变量,用来存放下一个数据的地址。
希望我的回答能让你满意,如有问题,还可继续探讨。