84669 orang belajar
152542 orang belajar
20005 orang belajar
5487 orang belajar
7821 orang belajar
359900 orang belajar
3350 orang belajar
180660 orang belajar
48569 orang belajar
18603 orang belajar
40936 orang belajar
1549 orang belajar
1183 orang belajar
32909 orang belajar
#include <iostream> using namespace std; int main() { int *i; i=(int*)malloc(sizeof(int)); ... //用cin或scanf输入i的值,即输入给定的地址 ... return 0; }
试过用cin>>i或scanf("%d",&i)都不行,应该怎样写?
cin>>i
scanf("%d",&i)
闭关修行中......
scanf没有输入指针类型的方法,因此输入数字再转换成地址。测试代码和结果如下(8866的十六进制表示为22A2):
int main(){
int *i; int i_temp; i=(int*)malloc(sizeof(int)); printf("i的地址为:%p\n",i); printf("请输入i的地址:"); scanf("%d",&i_temp); i=(int*)i_temp; printf("赋值后i的地址为:%p\n",i);
return 0;}
输入数字,然后强制转换(
问题不够清晰。你要给i赋值吗?你这样做了会使你malloc的地址,无法再被引用到,这会内存泄露的。就是我们平时说的野指针。
如果你是想让用户输入的内容直接存到这段内存中,那么scanf("%d",i),因为i本来就是个地址,这里不用&i.
scanf("%d",i)
如果你是想做在用户指定的地址申请一段内存,那么可以告诉你没有这种需求的。我们用的地址都是虚拟地址,是系统分配的,不是随便哪个地址都能用的。但是c语言很灵活,他并没有从语言层面限制你,那么非这样做的话会有以下可能:1.这段内存操作系统会保护的,直接报内存错误,程序崩溃。2.你不知道改了哪里的内存,反正读写正常,而且运行也没错,但是这种情况更危险,这是颗定时*,你永远不知道什么时候这段被踩的内存会错乱,而且可能连环反应,整个调用栈被踩的稀巴烂,定位都没法定位。大型程序都是这么崩溃的。
翻翻cin的手册不就行了吗?
cin >> *i;
scanf没有输入指针类型的方法,因此输入数字再转换成地址。测试代码和结果如下(8866的十六进制表示为22A2):
include<stdio.h>
int main()
{
return 0;
}
输入数字,然后强制转换(
问题不够清晰。
你要给i赋值吗?你这样做了会使你malloc的地址,无法再被引用到,这会内存泄露的。就是我们平时说的野指针。
如果你是想让用户输入的内容直接存到这段内存中,那么
scanf("%d",i)
,因为i本来就是个地址,这里不用&i.如果你是想做在用户指定的地址申请一段内存,那么可以告诉你没有这种需求的。我们用的地址都是虚拟地址,是系统分配的,不是随便哪个地址都能用的。但是c语言很灵活,他并没有从语言层面限制你,那么非这样做的话会有以下可能:
1.这段内存操作系统会保护的,直接报内存错误,程序崩溃。
2.你不知道改了哪里的内存,反正读写正常,而且运行也没错,但是这种情况更危险,这是颗定时*,你永远不知道什么时候这段被踩的内存会错乱,而且可能连环反应,整个调用栈被踩的稀巴烂,定位都没法定位。大型程序都是这么崩溃的。
翻翻cin的手册不就行了吗?