int *&p1 = p;和int *p1 = p;倍耐力p1和p6的区别别

请教malloc(100)和malloc(sizeof(int)*100)的区别_百度知道
请教malloc(100)和malloc(sizeof(int)*100)的区别
比如int *p1;p=(int *)malloc(100);这样开辟了一个整形数组可以存放100个整型,比如p[99]=10;我再输出是可以的。但是我看到一般的做法是p=(int *)malloc(sizeof(int)*100);那这样其实不就是开辟了一个整形数组可以存放400个整型数据了?,比如p[300]=20;也是能够赋给的。我本意是只要开辟一个存放100个整型数据的数组就够了,这样不就等于开辟了400个?何故我看到别人都是用第二种的呢????
我是在VC++ 6.0上做的,这个和编译环境有关系吗? 解答说malloc(100)只能装25个int,但是我经过测试用第一种方法p[99]也装进int了啊?这不就说明我用malloc(100)的方式可以装进100个整形???
提问者采纳
malloc(100)是开辟了100个byte。一个int是32位,4个byte。你malloc(100)相当于只能装25个int。 ---------------------回答补充问题:1、你p[500]=3也可以。但是因为你前面只开辟了100个byte,所以在超出的空间上进行的赋值操作其实是不安全的,因为系统认为100个byte之外的区域都是未被使用的,如果在其他地方还有malloc的操作的话,有可能将你非法使用的区域分配出去干其它事儿。而且,这种写越界的事儿往往在大型的系统中引起不可预知的一些问题。一定要避免,切记切记。
提问者评价
谢谢,也谢谢其他回答者,明白了
其他类似问题
为您推荐:
sizeof的相关知识
其他3条回答
malloc(100)是开辟了100个byte。一个int是32位即4个byte,sizeof(int)=4。所以malloc(sizeof(int)*100)=malloc(4*100)=malloc(400)。你说这两个区别大不大呢。既然是存放100个整型,应用malloc(sizeof(int)*100)。 也可以说跟编译环境有关,如果你的机子是32位的,那么一个整型就占4个byte,如果你的机子是64位的,那么一个整型就要占8个byte。
楼上说的不完全对。首先对malloc函数理解有误,去看下函数的原型就会知道你错在哪里。p=(int *)malloc(100)这样开辟的整型数据个数并不能确定是25个还是50个,因为在不同的系统中int所占的字节数不同。p=(int *)malloc(sizeof(int)*100)这样开辟的数据一定是100个整型,因为SIZEOF函数可以将类型所占字节数求出来,这样不管是什么系统总是能开辟100个整型数据。建议采用第二种做法,因为程序需要的是移植性,这样可以在不同系统上使用此程序。希望回答对楼主有帮助。呵呵 补充回答:完全是巧合,你机器系统int类型占8个字节也就是1个位,所以两种方式定义是等同的。呵呵。
p[99]是越界你到达的内存区是谁开的是未知的如果你p[99]=20运气好没什么,可能那块内存本身就没程序用运气差就有崩溃的可能
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁C语言习题 指针1_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
C语言习题 指针1
阅读已结束,如果下载本文需要使用
想免费下载本文?
你可能喜欢C语言指针习题及答案_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
C语言指针习题及答案
阅读已结束,如果下载本文需要使用
想免费下载本文?
你可能喜欢带*的不是指针吗?那这里面的*p 和 p 有什么区别呢?为什么不统一使用*P ? p又是什么意思?_百度知道
带*的不是指针吗?那这里面的*p 和 p 有什么区别呢?为什么不统一使用*P ? p又是什么意思?
action(){ char test1='A',test2='D'; char *p1=&test1; char *p2; lr_output_message(&p1=%c.&,*p1); p2=&test1; lr_output_message(&p1=%c.&,*p2); *p2='B'; lr_output_message(&p1=%c,p2=%c,test1=%c.&,*p1,*p2,test1); test2=*p2; lr_output_message(&test2=%c.&,test2); return 0;}
首先,char* p是声明一个指针变量,注意指针变量是p,而不是*p。其次,给指针变量的值是某个变量的地址,如声明一个指针变量char* p2;然后给它赋值p2=&test1;当然你在声明指针变量的时候也可以一起初始化,如char *p1=&test1;最后,只要声明之后,指针变量之前加*的意思就是取该指针变量所指地址的内存内的值,如test2=*p2;也可以给该地址的内存赋值,如*p2='B';
其他类似问题
为您推荐:
其他4条回答
*,出现在定义中,代表现在定义的变量是一个指针类型的变量
出现在其他地方,则代表指向,也就是指针所指地址中存放的值 在这个程序中char *p1=&test1
代表p1是一个指针,p1这个指针中存放text1的地址char *p2
代表p2是一个指针 lr_output_message(&p1=%c.&,*p1);
*p1是说p1指向的地址中,存放的值,也就是text1的值,也就是Ap2=&test1;
这是p2指向了text1,p2中现在存放的是text1的地址*p2='B';
将B赋值给p2指向的地址里面,也就是将B存放到text1中test2=*p2;
将p2指向的地址里面的值赋给text2,也就是B给了text2
char *p2;
//声明p2为字符型指针lr_output_message(&p1=%c.&,*p2);
//打印p2指针指向的内容,*p2表示获取指针所指的内容
首先 ,在定义时*p 表示指针,p表示变量;用的过程中*p表示取指针所指的地址,p表示所指存储地址里的值,也就是存放的数据!
*p指的是指针p所指的数值,p指的是指针p所指的数值的地址。另外在定义的时候可以使用*p。int *p=1,a=1,(p=&a与*p=1,a=1是同一个意思)
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 cowon p1和pm的区别 的文章

 

随机推荐