foo(int arr [])和foo(int arr [10])有什么区别?

时间:2016-01-27 16:51:24

标签: c function

C中的两个函数有什么区别吗?

void f1(int arr[]) {    
//some code...  
}
void f2(int arr[10]) {
//some code
}

f1函数中第一个数组的大小是多少?

2 个答案:

答案 0 :(得分:6)

  

c中的两个函数有什么区别吗?

这里没有区别。两者都将被编译器解释为//STATE HANDLER //++++++++++++++++++++++++++++++++++++++++++++++++++++++++ app.config([ '$stateProvider', '$urlRouterProvider', function($stateProvider, $urlRouterProvider) { $stateProvider .state('newAlarm', { url: '/newAlarm', views: { '': {templateUrl: '/templates/newAlarmPage.html'}, 'header@newAlarm':{templateUrl: '/templates/header.html'}, 'newAlarmForm@newAlarm':{templateUrl: '/templates/newAlarmForm.html'} }, controller: 'NewScheduleCtrl' }) //to be changed .state('home', { url: '/home', views: { '': {templateUrl: '/templates/homePage.html'}, 'header@home':{templateUrl: '/templates/header.html'} }, controller: '' }); //end of to be changed $urlRouterProvider.otherwise('home'); }]); ,因为当用作函数参数时,数组将转换为指向其第一个元素的指针。

  

f1函数中第一个数组的大小是多少?

严格来说,这里没有数组。它唯一指向int *arr的指针。如果您使用int,那么您将获得等于sizeof(arr)的值。

当参数类型是指向数组的指针时,需要参数中的数组大小。在这种情况下,您需要指定数组的大小,因为每个大小使指针指向不同的类型。

sizeof(int *)

答案 1 :(得分:3)

当一个数组传递给一个函数时,它会衰减成一个指向数组第一个元素的指针。

所以这个:

void f1(int arr[])

而且:

void f1(int arr[10])

而且:

void f1(int *arr)

都是等同的。

事实上,如果您将int a[20]传递给声明为int arr[10]的函数,gcc就不会抱怨。