这段代码哪里错了呢?
本帖最后由 御笔剑客 于 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吗? int Insert(int arr[],int i,int x) 参数 int arr[]是 num1数组的头地址..即指针...
一般指针的大小为4个字节!
for(i=0;i<6;i++) 越界了.. 橙C 发表于 2017-12-5 19:31
int Insert(int arr[],int i,int x) 参数 int arr[]是 num1数组的头地址..即指针...
一般指针的大小为4 ...
sizeof arr不是计算整型数组的元素个数吗?{:10_266:} 数组在传参的时候会退化为指针,记住这句话就可以了.
你在main函数里用sizeof是数组的大小.
在作为形参传参时,传进去的是指针.
c++传参形式有三种:值传递,指针传递,引用传递.
c和c++中都没有数组传递这一说. 御笔剑客 发表于 2017-12-5 19:33
sizeof arr不是计算整型数组的元素个数吗?
数组作为参数使用的时候..是传指针的..数组第一个元素地址.. 不能计算数组长度,因为为了节约开销,数组名会当做指针传递 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个字节大小 橙C 发表于 2017-12-5 19:45
数组作为参数使用的时候..是传指针的..数组第一个元素地址..
如果我要计算传入数组的长度怎么办呢?不能用sizeof了吗 御笔剑客 发表于 2017-12-5 22:15
如果我要计算传入数组的长度怎么办呢?不能用sizeof了吗
一般是在传参的时候加个 数组长度... 橙C 发表于 2017-12-7 10:27
一般是在传参的时候加个 数组长度...
我明白了,谢谢了
页:
[1]