御笔剑客 发表于 2017-12-5 19:20:05

这段代码哪里错了呢?

本帖最后由 御笔剑客 于 2017-12-5 19:22 编辑

#include <stdio.h>
int num;
int Insert(int arr[],int i,int x)
{
    int j;
    int m=sizeof(arr);
    int temp,temp1;
    if(i>0&&i<m)
    {
      for(j=0;j<i;j++)
            num=arr;

      num=x;
      for(j=i+1;j<m+1;j++)
            num=arr;
    }

    else
      return -1;
}
int main()
{
    int num1={1,3,4,5,6};
    int i,x;
    scanf("%d%d",&i,&x);
    Insert(num1,i,x);
    for(i=0;i<6;i++)
      printf("%d ",num);

}
为什么sizeof arr会得到4呢?不应该是5吗?

橙C 发表于 2017-12-5 19:31:17

int Insert(int arr[],int i,int x) 参数 int arr[]是 num1数组的头地址..即指针...
一般指针的大小为4个字节!

for(i=0;i<6;i++) 越界了..

御笔剑客 发表于 2017-12-5 19:33:25

橙C 发表于 2017-12-5 19:31
int Insert(int arr[],int i,int x) 参数 int arr[]是 num1数组的头地址..即指针...
一般指针的大小为4 ...

sizeof arr不是计算整型数组的元素个数吗?{:10_266:}

闪电猫网络 发表于 2017-12-5 19:37:26

数组在传参的时候会退化为指针,记住这句话就可以了.
你在main函数里用sizeof是数组的大小.
在作为形参传参时,传进去的是指针.
c++传参形式有三种:值传递,指针传递,引用传递.
c和c++中都没有数组传递这一说.

橙C 发表于 2017-12-5 19:45:05

御笔剑客 发表于 2017-12-5 19:33
sizeof arr不是计算整型数组的元素个数吗?

数组作为参数使用的时候..是传指针的..数组第一个元素地址..

BngThea 发表于 2017-12-5 19:54:22

不能计算数组长度,因为为了节约开销,数组名会当做指针传递

lyjlyj 发表于 2017-12-5 20:06:25

sizeof()计算的是字节数,int a;sizeof(a)的值是16,并不是4,如果逆向计算数组的元素,可用sizeof(a)/sizeof(a)
Insert(int arr[],int i,int x)中的int arr[] 作为参数,其实是相当于int *arr,所以sizeof(arr)就是4,指针类型的变量是4个字节大小

御笔剑客 发表于 2017-12-5 22:15:17

橙C 发表于 2017-12-5 19:45
数组作为参数使用的时候..是传指针的..数组第一个元素地址..

如果我要计算传入数组的长度怎么办呢?不能用sizeof了吗

橙C 发表于 2017-12-7 10:27:47

御笔剑客 发表于 2017-12-5 22:15
如果我要计算传入数组的长度怎么办呢?不能用sizeof了吗

一般是在传参的时候加个 数组长度...

御笔剑客 发表于 2017-12-7 18:47:54

橙C 发表于 2017-12-7 10:27
一般是在传参的时候加个 数组长度...

我明白了,谢谢了
页: [1]
查看完整版本: 这段代码哪里错了呢?