黑马程序员技术交流社区

标题: 这个程序 ,怎么用指针 改改 。 [打印本页]

作者: 远汀枫舞    时间: 2015-3-23 18:53
标题: 这个程序 ,怎么用指针 改改 。

#include <stdio.h>
void max(int *p);
int main()
{
    int a[6]={10,11,12,12,13,15};
   
    int size = sizeof(a);
   
    printf("%d\n",size);
   
    max(a);
   
    return 0;
   
   
   
}

void max(int *p)
{
    int max = p[0];
    int size2 = sizeof(p);
    for(int i = 0;i < size2;i++)
    {
   
        printf("p[%d]=%d\n",i,p[i]);
        if(p[i]>max)
            max = p[i];
      
    }
      printf("max=%d\n",max);


}
作者: 417284911    时间: 2015-3-23 19:00
不明白你的需求是什么
作者: 远汀枫舞    时间: 2015-3-23 19:12
就是 我定义了一个数组a[6];   准备遍历它  ,但想用 指针遍历  ,  可是  怎么我的程序  后面  会多两个不知道的数字  。   我知道  指针是 8 位的  ,所以 肯定 会输出  8个数据  。  但怎么 来改  ,让它 只输出 6  个数据  。  
作者: xiezhongmin    时间: 2015-3-23 19:41
int size2 = sizeof(p);这句错了,自己慢慢想,打字辛苦!
作者: 木线    时间: 2015-3-23 20:20
#include <stdio.h>

void max(int p[]);
int main()
{
    int a[6] = {10, 11, 12, 12, 13, 15};
   
    int size = sizeof(a);
   
    printf("%d\n", size);
   
    max(a);
   
    return 0;
}

void max(int p[])
{
    int max = p[0];
   
    int size2 = sizeof(p)/sizeof(int);
   
    for (int i; i < 6; i++)
    {
        if (p[i] > size2 ) {
            max = p[i];
        }
        printf("p[%d] = %d\n", i, p[i]);
    }
   
    printf("max = %d\n", max);
   
}
作者: 木线    时间: 2015-3-23 20:32
我大概明白你的意思,你要写成指针的原因就是要数组进去,而数组是以指针的形式传递的(后台实际是这样传的),并不是直接把形参写成指针。

其次就是sizeof(p),p是指针,那sizeof(p),就是指针的大小,8个字节,所以你的size2 = 8,所以你数组遍历的时候就是i < 8,就会打印出8个元素出来,而你的数组只定义了,六个,那剩下的两个打出来就是乱码。

还有用sizeof()来描述数组大小的时候,定义个数组int array[ ],sizeof(array)是数组元素占据的字节数,不是数组元素的个数,字节数除以数组类型占据的字节数才是数组元素的个数,如果是整型就要除以sizeof(int),小树的话就要除以sizeof(double).
作者: 木线    时间: 2015-3-23 20:35
粘贴错了,上面的代码有问题,稍等我对的贴上来。
作者: 木线    时间: 2015-3-23 20:38
#include <stdio.h>

void max(int p[]);

int a[6] = {10, 11, 12, 12, 13, 15};

int main()
{
    int size = sizeof(a);
   
    printf("%d\n", size);
   
    max(a);
   
    return 0;
}

void max(int p[])
{
    int max = p[0];

    int size2 = sizeof(a)/sizeof(int);
   
    for (int i; i < size2; i++)
    {
        if (p[i] > size2 ) {
            max = p[i];
        }
        printf("p[%d] = %d\n", i, p[i]);
    }
   
    printf("max = %d\n", max);
   
}
作者: 木线    时间: 2015-3-23 20:39
结果是:
24
p[0] = 10
p[1] = 11
p[2] = 12
p[3] = 12
p[4] = 13
p[5] = 15
max = 15
Program ended with exit code: 0
作者: 流风124    时间: 2015-3-23 22:43


#include <stdio.h>
void max(int *p,int n);
int main()
{
    int a[6]={10,11,12,12,13,15};
   
    int size = sizeof(a)>>2;
   
    printf("数据个数%d\n",size);
   
    max(a,size);
   
    return 0;
   
}

void max(int *p,int n)
{
    int max = p[0];
    //int size2 = sizeof(p);这里不对,永远8位,指针长度
    for(int i = 0;i < n;i++)
    {
        printf("p[%d]=%d\n",i,p[i]);
        if(p[i]>max)
            max = p[i];
    }
    printf("max=%d\n",max);
   
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2