1

我认为我对指针的理解有误解?

根据我的理解,int * twenties意味着 twenties 是一个指针int

那么对于*twenties = dollars/20;*twenties这里指的是指针的值吗?

pay_amount(money, &twenties, &tens, &fives, &ones);中,指针twenties存储&twenties在函数中的地址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;
}
4

2 回答 2

2

不,twentiesin themain()twentiesinpay_amount函数是不同的类型。

在调用pay_amount()frommain()时,您将传递 of 的地址twentiesmain()并将其存储在twenties (函数的块范围的本地)中pay_amount

twentiesin的类型main()是, inint的类型是。twentiespay_amountint *

如果您愿意,您可以完全使用两个不同的变量名称。

所以, in main(),twenties是一个int, 和一个像这样的打印语句

 printf("$20 bills: %d\n", twenties);

是正确的。需要注意的是,如果你想打印函数调用的twenties内部pay_amount(),你必须使用*twenties,正如你所期望的那样,因为它的类型是int *

于 2020-12-17T12:36:07.817 回答
0

因此,如果您将两个变量声明为:

int data_holder;
int* pointer;

并将值分配给它们:

data_holder = 10;
pointer = &data_holder;

会发生什么 - 编译器为data_holder和分配内存pointer。现在,当您将 10 存储在data_holder并用于&获取其地址并将其存储在 时pointer,将创建一个链接。要访问值 10 - 您可以使用data_holder取消引用 pointer

编辑:当我们*在声明指针变量期间使用时,它告诉编译器以不同的方式处理变量。当我们*再次使用该声明的指针时,我们实际上是在取消引用指针 - 访问存储在它指向的内存位置的值。

更具体地说;

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

在您的函数twenties等中是指针,而在main()twenties中是整数。

于 2020-12-17T12:45:29.700 回答