小编kry*_*ght的帖子

无法理解错误条件和左值

我是编程的初学者,正在尝试一些组合.

#include<stdio.h>


int main()
{
int a=5;

printf("%d",&a); // STATEMENT 1
printf("\n%d",a); //STATEMENT 2
printf("\n%d",&(a++)); //STATEMENT 3
printf("\n%d",a);  //STATEMENT 4

return 0;
}
Run Code Online (Sandbox Code Playgroud)

我在STATEMENT 3中说错了

[错误]左值作为一元'&'操作数需要

我期望STATEMENT 1和3的输出相同,因为两个地址都是相同的.

我还期望STATEMENT 2的输出为5&STATEMENT 4为6.

我抬起头,发现了一个类似的问题:Lvalue需要错误

我在那个问题上理解了这个问题.从评论到上面提到的问题的第一个答案,我认为左值是可以存储某些东西的东西.

但我仍然无法理解为什么&(a ++)或&(++ a)应该给出错误.任何帮助将不胜感激.

谢谢您阅读此篇.

[编辑]感谢您的回答.如果可能的话,请包括参考,其中讨论了这些表达的确切执行顺序或性质.这样,像我这样的新手不会因为这些微不足道的问题而困扰社区.

c compiler-errors lvalue

2
推荐指数
1
解决办法
133
查看次数

自动类型转换差异

#include<stdio.h>

int main(){

float a,b;

a=5;
b=12;

printf("Result:%f",a+b);

return 0;   
Run Code Online (Sandbox Code Playgroud)

}

如果我将结果显示为float,我得到17.0.No问题但是我显示一个+ b为int,我得到的结果为0.

我尝试了不同的a&b值来寻找一些模式.无论a和b的值是什么,当显示为int时,a + b显示为0.

显示为float时没有问题.

我的理由是,如果我尝试将一个浮点数打印为int,则小数部分将被截断.

我错在哪里.我通过类型转换教程搜索但无法解释这种差异.

可能这是一个非常基本的疑问,但我无法推断出这种差异背后的原因.我不知道标题是否合适.请继续.

我是初学者.如果你能提供一个我可以参考这些疑问的来源,我会感激不尽,并且不会因为愚蠢的怀疑而烦扰社区.

c casting type-conversion

1
推荐指数
1
解决办法
32
查看次数

*(int*)在C中的含义是什么

#define value1 *(int*)46
Run Code Online (Sandbox Code Playgroud)

我在头文件中遇到了类似的声明,用于微控制器的中断(寄存器)和外设的地址定义.

我怎么解释它?

我们通过对类型进行类型转换并使用*运算符从中提取值来使46成为指针类型.因此,位置46处的值必须存储在value1中.

怎么了?

printf("%d",&value1)
Run Code Online (Sandbox Code Playgroud)

这将x的地址返回为46.

printf("%d",value1)
Run Code Online (Sandbox Code Playgroud)

这会产生运行时错误.当我们尝试访问x的值时,也会产生运行时错误.

以下是我的问题:

  1. 究竟是什么*(int *)46意思?

  2. 什么是value1?整数指针或整数

关于这个或任何其他使用指针的方式的任何更多信息和额外评论对于像我这样的初学者是最受欢迎的.先感谢您.

c c++ pointers

-3
推荐指数
2
解决办法
7681
查看次数

标签 统计

c ×3

c++ ×1

casting ×1

compiler-errors ×1

lvalue ×1

pointers ×1

type-conversion ×1