我剛開始學習編程,我正在做一個單元,在我的工程課程中,我碰到過指針。我只是想要一些保證,我真正理解這個概念正確地使用指針作爲函數中的參數。如果我理解正確,那麼即使它是調用函數範圍內的局部變量,也會將指針傳遞給您希望被調用的單獨函數更改的變量的地址。那有意義嗎?我從我的文本書中重新編寫了一個例子。唯一的辦法是他們把它放在兩個不完整的部分中,然後我把它們放在一起,填入空格並在主函數中添加最終的printf語句。我會貼在這裏:C爲新手指針
#include <stdio.h>
#include <stdlib.h>
#define READ_OK 0
#define READ_ERROR 1
int read_num(int lo, int hi, int *num);
int main(int argc, char *argv[])
{
int lo = 0, hi = 0, *num, val;
printf("Please enter a lower bound and an upper bound for your range,respectively\nLower: ");
scanf("%d", &lo);
printf("Upper: ");
scanf("%d", &hi);
num = &val;
if(read_num(lo,hi, &val) != READ_OK)
{
printf("Read error, program abort\n");
exit(EXIT_FAILURE);
}
else
{
printf("You entered %d, press any key to continue: \n", val);
getchar();
}
return 0;
}
int read_num(int lo, int hi, int *num)
{
int next;
printf("Enter a number between %d and %d: ", lo, hi);
while(scanf("%d", &next)==1)
{
if (lo<=next && next<=hi)
{
*num = next;
return READ_OK;
}
printf("%d is not between %d and %d\nTry again: ", next, lo, hi);
}
return READ_ERROR;
}
那麼我的理解是否正確? 「val」在read_num()中通過以指針「* num」的形式傳遞地址來修改,然後寫入「next」的值? PS:這句法正確嗎?PPS:這個過程會被稱爲什麼?
多謝您的幫助:)
我不認爲你需要''main()'裏面的num * – Subinoy
是的,代碼和你在最後一句中說的是正確的。不過,'main'中的'num'變量是不必要的。你賦值給它一次,而不再使用它(請注意,'read_num'中的int * num是一個完全不同的變量)。 – szczurcio
@szczurcio完全不同的含義是儘管他們擁有相同的地址,但它們存儲在不同的地方,所以改變它們的值不會影響其他地方,但是改變它的ponitee的值會影響原始變量'val',無論你是在'main()'還是在'read_num()'中執行,儘管你從不使用'num',你只是初始化了它,所以使用gcc和警告會引發爭論。 –