好的,所以我試圖學習一些基本的c,因爲我需要知道在我的工作。我習慣了Java,並且在訪問和改變一個struct成員的值時遇到了一些麻煩。在不同的函數中改變一個結構體的值
我試圖建立的程序是一個簡單的撲克客戶端。 我有以下結構:
typedef struct kort{
int draget;
char farg;
int nummer;
struct kort *next;
}kort; `
我也有一個名爲「blandaKort()」,其產生該結構的52名成員,並把它們添加到一個陣列中,分配服和號碼功能。代碼如下:
void blandaKort(){
char farg[4]={'S','K','R','J'};
int nummer[14]={0,2,3,4,5,6,7,8,9,10,11,12,13,14};
kort kortArray[52];
int tempRaknare=0;
int i;
int j;
kort *huvud=NULL;
for(i=0; i<=3; i++){
for(j=1; j<=13; j++){
kort *huvud=NULL;
// kort k;
kort *k;
k=(kort*)malloc(sizeof(kort));
k->farg=farg[i];
k->nummer=nummer[j];
k->draget=0;
huvud=k;
// k.farg=farg[i];
// k.nummer=nummer[j];
kortArray[tempRaknare]=*k;
tempRaknare++;
}
}
tempRaknare, i, j =0;
delaHand(kortArray);
}
功能delaHand()
取卡的陣列,並選擇兩個隨機卡。我試圖完成的是將我的標誌「draget」設置爲1,它告訴我哪些卡被繪製。代碼如下:
void delaHand(kort kortArray[]){
srand(time(NULL));
int x = rand() % 52 + 1;
int y = rand() %52+1;
kort *k;
k=(kort*)malloc(sizeof(kort));
kort kortHand[2];
//if(kortArray[x].draget!=1){
kortHand[0]=kortArray[x];
*k=kortArray[x];
k->draget=1;
kortArray[x]=*k;
// }
//if(kortArray[y].draget!=1){
kortHand[1]=kortArray[y];
kortArray[y].draget=1;
.....
時,即時通訊打印的kortHand[]
成員它顯示了正確的西裝和數量,但是變量draget
保持不變。 歡呼聲
有人建議我刪除delaHand()中的k變量,所以我將代碼更改爲:kortArray [x] .draget = 1; kortHand [0] = kortArray [x];並知道它工作正常。我必須承認我有一些問題,理解c中的整個引用處理(每當使用指針時,*或&:) :) – 2012-02-23 08:40:23