A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

远汀枫舞

初级黑马

  • 黑马币:24

  • 帖子:6

  • 精华:0

© 远汀枫舞 初级黑马   /  2015-3-23 18:53  /  1023 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


#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);


}

9 个回复

倒序浏览
不明白你的需求是什么
回复 使用道具 举报
就是 我定义了一个数组a[6];   准备遍历它  ,但想用 指针遍历  ,  可是  怎么我的程序  后面  会多两个不知道的数字  。   我知道  指针是 8 位的  ,所以 肯定 会输出  8个数据  。  但怎么 来改  ,让它 只输出 6  个数据  。  
回复 使用道具 举报
int size2 = sizeof(p);这句错了,自己慢慢想,打字辛苦!
回复 使用道具 举报
#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);
   
}
回复 使用道具 举报
我大概明白你的意思,你要写成指针的原因就是要数组进去,而数组是以指针的形式传递的(后台实际是这样传的),并不是直接把形参写成指针。

其次就是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:10
7#
粘贴错了,上面的代码有问题,稍等我对的贴上来。
回复 使用道具 举报
木线 初级黑马 2015-3-23 20:38:10
8#
#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);
   
}
回复 使用道具 举报 1 0
木线 初级黑马 2015-3-23 20:39:11
9#
结果是:
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
回复 使用道具 举报


#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);
   
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马