84669인 학습
152542인 학습
20005인 학습
5487인 학습
7821인 학습
359900인 학습
3350인 학습
180660인 학습
48569인 학습
18603인 학습
40936인 학습
1549인 학습
1183인 학습
32909인 학습
#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的手册不就行了吗?