簡體   English   中英

我對在 c 中使用指針的概念感到非常困惑

[英]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()中的twentiespay_amount twenties中的 20 是不同的類型。

main()調用pay_amount() ) 時,您傳遞了main()twenties的地址,並將其存儲在 pay_amount 的twenties (函數的塊pay_amount的本地)中。

main()twenties的類型是intpay_amounttwenties的類型是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_holderpointer分配 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM