注册 登录
编程论坛 C++教室

指针上的小问题,求解!!!

hezitulong 发布于 2010-11-17 22:06, 618 次点击
#include"iostream.h"
int *max(int*p,int a);
int main()
{
    int a[]={2,3,4,6,45,3,23,65};
    cout<<*max(a,7)<<endl;
    return 0;
}
int *max(int*p,int a)
{
    int *max=p;/*如果把这句改成int *max=0;或int *max=NULL;运行时都会崩溃。这是为什么?*/
    for(int i=0;i<a;i++)
    {
        if(p[i]>*max)
        *max=p[i];
    }
    return max;

}
初学者,请大家指教;谢谢!
5 回复
#2
m21wo2010-11-17 22:17
程序代码:
#include<iostream>
using namespace std;
int *max(int*p,int a);
int main()
{
    int a[]={2,3,4,6,45,3,23,65};
    cout<<*max(a,7)<<endl;
    return 0;
}
int *max(int p[],int a)
{
    int *max=new int ;/*如果把这句改成int *max=0;或int *max=NULL;运行时都会崩溃。这是为什么?*/
    *max=0;
    for(int i=0;i<8;i++)
    {
        if(p[i]>*max)
        *max=p[i];
    }
    return max;

}
要给max 申请内存
#3
laoyang1032010-11-17 22:23
楼上说的很对  她的意思是你的 max 指针没有分配空间
#4
南国利剑2010-11-18 18:58
回复 楼主 hezitulong
这个问题很明显。
因为指针的值为0或者空,代表这个指针不指向任何内存空间。所以程序当然崩溃了。

还有二楼的做法也很危险。
注意要及时释放申请的内存。
#5
hezitulong2010-11-18 19:02
谢谢
#6
无名可用2010-11-19 22:39
我觉得用下标处理数组要比用指针处理数组安全许多..
max()函数也可以这样写,也许产生异常的可能性小些。
程序代码:
int Max(int p[],int a)
{
    int max=p[0];
    for(int i=0;i<a;i++)
    {
        if(p[i]>max)
           max=p[i];
    }
    return max;
}
你的代码当执行Max()函数时把原数组的第一个数据覆盖了。。
if(p[i]>*max)
        *max=p[i];
小心。希望对楼主有帮助
1