『壹』 關於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數組對應於該字元的位置置零
為了保證每個只輸出一次
這樣說不知道能不能理解