首页 > 编程语言 > 详细

当数组作为参数时,会退化为指针问题

时间:2021-05-27 11:38:12      阅读:11      评论:0      收藏:0      [点我收藏+]

今天写了一个冒泡排序和快排,就想着能不能写一个函数可以获取数组的长度,结果遇到了问题

我是这样写的

int getLen(int arr[]){
    return sizeof(arr)/sizeof(arr[0]);
}
//报错 warning: ‘sizeof‘ on array function parameter ‘arr‘ will return size of ‘int *‘ 

报错是数组作为参数时会当成指针,arr为数组首元素的地址,所以就不能 sizeof(arr)了

所以报错了

如果求sizeof(*arr),结果为 4,我验证的结果

#include<stdio.h>
void getLen(int arr[]){
    printf("%x\n",arr);			//65fe00
    printf("%d\n",*arr);		//12
    printf("%d\n",sizeof(*arr));	//4
    printf("%x\n",arr+1);		//65fe04
    printf("%d\n",*(arr+1));		//23
}
int main(){
    int arr[] = {12,23,34,45,56};
    getLen(arr);
}

所以写打印数组和冒泡的函数时,传一个长度参数进去

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<stdbool.h>
void Init_Ar(int *ar,int n){		//初始化数组
    assert(ar != NULL);
    for(int i = 0; i< n;i++){
        ar[i] = rand()%100 + 1;
    }
}

void Print_Ar(int *ar,int n){		//打印数组
    for(int i = 0;i < n;i++){
        printf("%d\t ",ar[i]);
        if((i+1)%5 == 0){
            printf("\n");
        }
    }
}
void swap(int *a,int *b){			//交换
    int temp = *a;
    *a = *b;
    *b = temp;
}
void BubbleSort(int *ar,int n){		//冒泡
    for(int i = 0; i < n-1; i++){
        bool tag = true;
        for(int j = 0; j < n-i-1; j++){
            if(ar[j] > ar[j+1]){
                swap(ar+j, ar+j+1);
                tag = false;
            }
        }
        if(tag) break;
    }
}
int main(){
    int br[] = {};
    Init_Ar(br,100);
    BubbleSort(br,100);
    Print_Ar(br,100);
    
}
结果
1        2       3       4       5       
6        6       7       7       9
12       12      13      17      17
19       19      22      23      24
24       24      25      27      27
28       28      30      30      30
30       32      34      35      36
36       37      38      38      39
39       40      41      41      42
42       42      42      43      43
43       45      45      46      47
48       48      49      49      51
54       54      55      57      58
59       60      62      63      63
65       65      65      67      68
68       69      70      70      71
72       74      77      79      79
82       83      83      85      89
91       91      92      92      93
94       95      96      96      100

当数组作为参数时,会退化为指针问题

原文:https://www.cnblogs.com/fgxr/p/14815723.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!