![](/img/trans.png)
[英]I am unable to get the basic concept in this c program using for loop
[英]I am very confused with the concept of using pointers in c
我認為我對指針的理解有誤解?
根據我的理解, int * twenties
意味着 twenties 是指向int
的指針。
所以對於*twenties = dollars/20;
,這里的*twenties
指的是指針的值嗎?
在pay_amount(money, &twenties, &tens, &fives, &ones);
, 指針twenties
將&twenties
的地址存儲在 pay_amount 的pay_amount
中? printf("$20 bills: %d\n", twenties);
打印出地址而不是值?
#include <stdio.h>
void pay_amount(int dollars, int *twenties, int *tens, int *fives, int *ones);
int main(void) {
int money = 0, twenties, tens, fives, ones;
printf("Enter a dollar amount: ");
scanf("%d", &money);
pay_amount(money, &twenties, &tens, &fives, &ones);
printf("$20 bills: %d\n", twenties); // why isnt not *twenties??? I got an error if I put *twenties
printf("$10 bills: %d\n", tens);
printf(" $5 bills: %d\n", fives);
printf(" $1 bills: %d\n", ones);
return 0;
}
void pay_amount(int dollars, int *twenties, int *tens, int *fives, int *ones) {
*twenties = dollars / 20;
dollars -= *twenties * 20;
*tens = dollars / 10;
dollars -= *tens * 10;
*fives = dollars / 5;
dollars -= *fives * 5;
*ones = dollars;
}
不, main()
中的twenties
和pay_amount
twenties
中的 20 是不同的類型。
從main()
調用pay_amount()
) 時,您傳遞了main()
的twenties
的地址,並將其存儲在 pay_amount 的twenties
(函數的塊pay_amount
的本地)中。
main()
中twenties
的類型是int
, pay_amount
中twenties
的類型是int *
。
如果您願意,您可以完全使用兩個不同的變量名稱。
因此,在main()
中, twenties
是一個int
和一個 print 語句,例如
printf("$20 bills: %d\n", twenties);
是正確的。 需要注意的是,如果您想在pay_amount()
function 調用中打印twenties
,您必須使用*twenties
,正如您所期望的那樣,因為它的類型是int *
。
因此,如果您將兩個變量聲明為:
int data_holder;
int* pointer;
並將值分配給它們:
data_holder = 10;
pointer = &data_holder;
會發生什么 - 編譯器為data_holder
和pointer
分配 memory 。 現在,當您將 10 存儲在data_holder
中並使用&
獲取其地址並將其存儲在pointer
中時,將創建一個鏈接。 要訪問值 10 - 您可以使用data_holder
或取消引用pointer
。
編輯:當我們在聲明指針變量期間使用*
時,它告訴編譯器以不同的方式處理變量。 當我們再次對聲明的指針使用*
時,我們實際上是在取消引用指針 - 訪問存儲在它指向的 memory 位置的值。
更具體地說;
printf("The value of data_holder is %d", data_holder);
printf("The value of data_holder is %d", *pointer);
類似地,值 10 可以通過兩種方式修改;
data_holder = 200; //The value is changed from 10 to 200
*pointer = 300; //The value is changed from 200 to 300
在您的 function 中, twenties
等是指針,而在main()
中, twenties
等是整數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.