‘壹’ 关于c语言中变量在两个.C文件中的调用问题
我有几个方案,我经常在VC下使用,都没问题,你试试:
方案1:在一个文件中定义全局变量“类型 tmp;”,注意是全局变量。另一个文件全局变量的位置使用“extend 类型 tmp;”。
方案2:把hal.c文件里的函数参数加一个指向tmp的指针,tmp在main中,在hal.c里的文件使用tmp时,把地址传过去就行了。
例如:
mian()
{
char tmp;
.....
.....
}
function(&tmp;...;...);
...
}
在hal.c里面
function(char *tmp;...;...)
{
....
}
这样就行了
方案1、2都不用hal.h
方案3:你把hal.c的子函数写进hal.h,在mian函数之前include一下就行了。
但不推荐此方法。
对你出现的问题的理解:
你在hal.h中声明了tmp,在两个文件里都包含它,表示包含了两次,C语言规定如果没有限定为局部变量,则各个文件都可以调用,这就导致你声明了两个名称相同的同类型变量,当然不行。
如果定义为局部变量,那么另一个文件就没办法用它了,或者这么说:两个文件各有一个tmp但不是同一个tmp,改变一个的值,另一个不变。
常用方法就是extend一下(方案1)。
顺便说一句,我从来没用过unsigned char类型,因为char类型本身就是非负的,可能是因为编译器的关系吧
‘贰’ c语言中定义一种函数使一组数从高到低排序
给你一个直接插入排序
#include "stdio.h"
void InsertSort(int a[], int left, int right) {//对数组a从下标为left到right区域进行直接插入排序
int i, j, tmp;
for(i = left + 1; i <= right; i++) {
for(j = i - 1, tmp = a[i]; j >= left && tmp > a[j]; j++)
a[j + 1] = a[j];
a[j + 1] = tmp;
}
}
void main( ) {
int i, n, a[100];
scanf("%d", &n);
for(i = 0; i < n; i++)
scanf("%d", &a[i]);
InsertSort(a, 0, n - 1);
printf("\n");
for(i = 0; i < n; i++) printf("%d\t", a[i]);
‘叁’ c语言的tmp什么意思
应该只是一个变量名,很多程序都习惯把一些临时变量命名为tmp(应为英文temporal的简写),表示是一个临时性的变量。
‘肆’ C语言在一个函数里面定义了一个结构体,怎么在另外一个函数里面使用
函数里定义的结构体是局部变量,在这个函数外是不能使用的。
你要在函数外定义成全局变量。
例,函数外:
struct
s{
int
a;
}s1,s2;
这样的就定义了两个全局的结构体s1,s2,这两个结构体在所有函数中都可以使用,当然,使用它们的函数里,不能再定义相同名称的局部变量,否则使用的就是局部变量了。
‘伍’ tmp的用法 C语言
不知道你了解ASCII码不
一个char由8个比特位构成
哪么一个char类型的变量可以表示的256个不同的字符
分别从00000000(0)-11111111(255)
比如我们熟知的'a'是97
这里的tmp数组其实就是用来表示这256个字符的
while(s[i] != '\0')
tmp[s[i++]] = 1;
如果有这个字符,就把他的ASCII马对应的位置置1
那这个例子的第一个字符来说
tmp[97]=1;
下面的for循环是输出该字符后
把tmp数组对应于该字符的位置置零
为了保证每个只输出一次
这样说不知道能不能理解