繁体   English   中英

C题变量的定义和声明

[英]Define and declare of variable of C question

我有一个关于定义和声明变量的问题。 我将 pi 定义为 3.14 并想查看它的地址,但是

    printf("address of pi is %d\n", &pi);

这一行给出了一个错误。 这有点奇怪,因为

    printf("address of pi is %.2f\n", pi);

此行打印 3.14。 这是否意味着定义 pi 不会为 pi 分配内存位置? 那么 3.14 是从哪里来的呢?

#include <stdio.h>
#define pi 3.14

int main(){
    
    printf("address of pi is %.2f\n", pi);
    printf("address of pi is %d\n", &pi);
    return 0;

}

#define宏执行直接文本/标记替换。 所以在预处理器运行后,这个:

printf("address of pi is %d\n", &pi);

变成这样:

printf("address of pi is %d\n", &3.14);

因此,您实际上是在尝试获取无效的数字常量的地址。

您是否将pi声明为变量,即:

float pi = 3.14;

然后你可以得到它的地址。

此外,您应该使用%p来打印变量的地址,而不是%d ,并且您需要将地址转换为void *

#define 用于常量。 它是一个预处理器指令。 因此该值是在编译时定义的,而不是分配的。

如果你想给一个变量赋值,你必须像这样声明变量并赋值:

float pi=3.14;
pi=0.0001;

无论何时声明变量,都会自动分配所需的内存量。

另一方面,&pi 不表示变量pi 的内容,而是表示变量内容存放的地址。 所以,正确的代码应该是:

#include <stdio.h>

int main(){

    float pi=3.14;    
    printf("address of pi is %.2f\n", pi);
   
    return 0;

} 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM