我有三个关于数据类型的问题!!!
三张图的冲突给我整的有点懵了,诚邀C语言大佬解惑,不甚感激。 注:用的是vscode char *a;scanf("%s", a) // 字符串不要放 &
char a;
scanf("%s", a) // 字符串不要放 & 本帖最后由 AUUTS 于 2022-2-8 14:02 编辑
第一个不要用%s啊
用%c就行了,你试试 傻眼貓咪 发表于 2022-2-8 08:18
char *a;
scanf("%s", a) // 字符串不要放 &
不懂,是指针吗 第三个不要设置int height
设置成float height,下面的%d也改成%f
应该可以 &是取地址符号,顾名思义,scanf后面需要的是地址;
指针、数组实质就是地址。 FK二十一 发表于 2022-2-8 13:58
不懂,是指针吗
如 7楼 所说,scanf 后面要的就是地址 第一个问题:
char *a,把a定义成了一个指针,
这里假设a的地址是1,而a指向的地址是10;
scanf("%s",&a),这里面是往a的地址写入数据;
而printf出来的是a指向的地址的数据;
大致的意思就是你把数据写入了以1起始的地址;
而输出的却是以10起始的地址的数据。
第二个问题:
这个问题也是因为指针,scanf中的&a的数据类型相当于一个数组指针,它指向的是数组a的起始地址,
比如数组a所占有的内存地址是1,2,3;
但是通过这个指针,可以对数组a之后的内存的数据进行操作;
所以就可以输入超过数组a的范围的数据。
第三个问题:
这个就简单了,就是单纯地因为数据越界了,然后被覆盖掉了,
一个中文是占两个字节的,你name定义的是三个字节,
你输入“小甲鱼”,在name存储的只有“小”字 和 “甲”字的一半数据,
所以输出的只有“小”字是对的。
另外,你这个头像我好像在哪见过。 番杰 发表于 2022-2-9 18:01
第一个问题:
char *a,把a定义成了一个指针,
这里假设a的地址是1,而a指向的地址是10;
1.第一个问题是char*不是char *a,所以我觉得应该不是指针的问题吧(我不确定,还没学到指针。)
2.下面两个问题你这样说的话,是不是因为如果有两个以上的scanf,也就对应了多个变量,那么系统给他们分配
的内存就是连续的,所以不能越界。只有一个一个变量的时候就可以越界。
3.可能我们在其它区见过吧。
4.感谢大佬赐教! FK二十一 发表于 2022-2-10 23:07
1.第一个问题是char*不是char *a,所以我觉得应该不是指针的问题吧(我不确定,还没学到指针。)
2.下面 ...
1.怎么说呢,char * 不是算是一个数据类型(?我太明确应该怎么去描述)
而应该整体的去看char * a,这里的*是修饰a的,表明a是一个指针,char则表示的是这个指针a指向的是char类型的数据。
所以第一题里不是char * 和 scanf不兼容,
而是你用的scanf有问题,后面的&a,应该是a;
原因就是我之前回答的。
2.记住任何时候都不应该让数据越界,这个可能会大致很大的错误,一定注意。
番杰 发表于 2022-2-11 09:35
1.怎么说呢,char * 不是算是一个数据类型(?我太明确应该怎么去描述)
而应该整体的去看char * a,这 ...
好的好的,多谢多谢。
页:
[1]