为什么声明一个变量p为int并在scanf中使用它是可以的,但如果我不使用scanf就不行?

7ivaypg9  于 2023-08-03  发布在  其他
关注(0)|答案(2)|浏览(84)

在这里学习C我目前在指针的主题,我对一些事情感到困惑。

int c;
printf("insert the first number of your age");
scanf("%d", &c);

字符串
上面的一个工作正常,但不

int c;
int p = 1;
c = &p;


还有,为什么我们不用&来表示字符串。比如说

char val[2];
printf("please insert your Blood type");
scanf("%c",val);


我对计算机体系结构有相当的了解。如果它可以被关联,如果你能通过将它连接到**微指令和CDU(控制解码单元)来向我解释它,通过将它也关联到外部总线,如 MARMDR*,那将是非常好的。

iszxjhcz

iszxjhcz1#

  • scanf("%d", &c);中,您将指向int的指针传递给scanf函数,以便它可以写入指针指向的变量(即c)的内存。
  • c = &p;中,您尝试将int*分配给int。这些是不兼容的类型。一个int* * 指向 * 一个int,但不是一个int
  • scanf("%c",val);中,char数组val * 衰减 * 为指向数组中第一个元素的指针。类型是char*-这正是%cchar写入提供的内存所需的类型。如果变量var是一个char而不是一个char数组,那么就需要scanf("%c", &val);来提供一个char*

如果你能通过将它连接到微指令和CDU(控制解码单元)来向我解释它,并将它与外部总线(如MAR和MDR)联系起来,那就太好了
我看不出这有什么关系。您使用的语言提供了一组规则和对底层进行的抽象。所描述的scanf和指针操作在任何兼容的C实现中以相同的方式工作,而不管C代码在特定目标平台上工作所需的机器代码、微指令和总线。而且,我对这些事情知之甚少。

k2fxgqgv

k2fxgqgv2#

int c;
int p = 1;
c = &p;

字符串
c不是指针,所以它不能保存 * p的地址 *。你应该使用:

int *c;
int p = 1;
c = &p;


那密码就不会错但从上下文中看不出你假装用这些变量做了什么,所以我只是猜测。

相关问题