数组当做参数传递的问题

/*
 ============================================================================
 Name        : TestArray.c
 Author      : lf
 Version     :
 Copyright   : Your copyright notice
 Description : 数组当做参数传递的问题

  数组当做参数传递的时候,传递的是数组的指针
  因为:
 1 数组的拷贝很耗费资源.为了避免这种情况,C语言的编译器在传递数组时传递数组的指针
 2 C语言中数组名代表了数组的首地址

 但在接收到该数组参数后,对其进行操作时还是作用于原来的数组.

 这个问题有点特殊,暂时记下来,后续在深究.
 ============================================================================
 */

#include <stdio.h>
#include <stdlib.h>

int main(void) {
	//所占内存大小为20个字节
	int array[5]={1,2,3,4,5};
	printf("main int array[5] size=%d\n",sizeof(array));
	printf("===========\n");

	int i;
	for(i=0;i<5;i++){
		printf("first array[%d]=%d\n",i,array[i]);
	}
	printf("===========\n");

	//把数组作为参数传递到其他的函数
	testArray(array);
	for (i = 0; i < 5; i++) {
		printf("second array[%d]=%d\n", i, array[i]);
	}
	printf("===========\n");
	return EXIT_SUCCESS;
}

void testArray(int array[5]){
	//因为传递过来的仅仅是个指针,所以其大小为4个字节
	printf("testArray int array[5] size=%d\n",sizeof(array));
	printf("===========\n");

	//改变原来的数组
	int i;
	for (i = 0; i < 5; i++) {
		array[i] = array[i] + 5;
	}
}

时间: 2024-10-17 04:03:49

数组当做参数传递的问题的相关文章

二维数组作为参数传递的问题

1.当我们使用二维数组作为参数传递的时候,所传递的二维数组的第二项必须为一个常数,否则编译不能通过,如int a[][3]; 例如: #include<stdio.h> #define N 3 int turn(int a[][N]) //注意此处 { int i,j,temp; temp=0; for(i=0; i<N; i++) { for(j=0; j<N; j++) { if(i<j) { temp =a[i][j]; a[i][j]=a[j][i]; a[j][i]

C语言一级指针、二级指针、数组作为参数传递需要注意的若干问题

在C语言编程时,经常会用到指针或数组作为参数传递,但有时结果却并不是自己想要的.下面总结下指针.数组作为参数传递需要的问题. 一级指针与二级指针的使用范围: 一级指针存放变量的地址,指向的值是变量的内容.如int* p={1,2,3}, p=数组的首地址,*p=数组的第一个值: 二级指针存放一级指针的地址,指向一级指针.如int*p ={1,2,3}, int**pp=&p,pp=指针p的首地址,*pp=数组的首地址,**pp=数组第一个值1. 在作为参数传递时什么时候用一级指针,什么时候用二级

关于数组作为参数传递以及数组名和对数组名去址的差异

这里再次探讨一下对于数组a,a和&a有什么不同 1 #include <stdio.h> 2 3 void change_array(char*, int); 4 5 int main(void) 6 { 7 char a[10] = "abcdefg"; 8 printf("&The address of origin a = %p\n",&a); 9 printf("a1: %p\n", a); 10 pr

二维数组作为参数传递

//二维数组传参问题示例 #include<iostream> using namespace std; //方法1:传递数组,注意第二维必须标明 void fun1(int arr[][3],int iRows) { for(int i=0;i<iRows;i++) { for(int j=0;j<3;j++) { cout<<arr[i][j]<<" "; } cout<<endl; } cout<<endl;

js中数组作为参数传递的定义

下面的函数实现了一个我们想要的最基本的图片预加载效果 function preloadimages(arr){    var newimages=[]    var arr=(typeof arr!="object")? [arr] : arr  //确保参数总是数组    for (var i=0; i<arr.length; i++){        newimages[i]=new Image()        newimages[i].src=arr[i]    }} 我

C#中数组作为参数传递的问题

原则:尽可能控制对数据的修改,如果可以预测某个数据不会或不应该被改变,就要对其控制,而不要期望使用这个数据的调用者不会改变其值. 如果参数在使用过程中被意外修改,将会带来不可预知的结果,而且这种错误很难被检查到,所以我们在设计方法参数的时候,要充分考虑传递引用类型参数或者引用方式传递引用类型参数可能带来的后果. 如果一个数据在传递过程中不能被改变,就要在构建这个对象的时候就使其值(字段或属性)不被改变. 一.对于简单的参数的控制 1.值类型参数传递 这种情况因为传递的是参数的副本,不影响原始值,

c语言一维数组做参数传递给函数:

今天碰到了一维数组做函数参数的问题,那就扒一扒这个问题: 首先抛结论: 1:C语言中,当一维数组做函数参数时,编译器总是把它解析成一个指向其首元素的指针. 2:实际传递的数组大小与函数形参指定的数组大小没有关系. 然后举例说明: 下面是一个元素交换函数,把数组array[i]和array[j]交换位置.注意看数组是怎么传递给函数的. 正确的写法1: 解释说明:编译器把array解析成指向整形元素的指针,也就是数组的首地址,方括号中加不加指定数字都可以,因为编译器根本不看,因此最好不写,以免引起误

delphi 数组作为参数传递

在函数中如果数组的个数不定,可以使用开放数组参数 实参可以接受静态数组和动态数组 procedure p1(a:array of Byte); begin ShowMessage( IntToHex( Integer(@a),2)); ShowMessage(IntToStr(a[0])); end; procedure TForm1.btn1Click(Sender: TObject); var a:array[0..5] of Byte; begin ShowMessage(IntToHex

JavaScript中把数组当做键值对集合使用。

<script type="text/javascript"> var names = new Array(); names[0] = "张三"; names[1] = "李四"; names[2] = "王五"; names[3] = "赵六"; //键值对集合是没有length长度的,所以遍历的时候使用forin循环来遍历. //对于普通数组遍历的时候要使用for循环来遍历. for (va