在用数组名作函数参数时,不是进行值的传送,不会把实参数组的每一个元素的值都赋予形参数组的各个元素。因为实际上形参数组并不存在,编译系统不为形参数组分配内存。那么,数据的传送是如何实现的呢?数组名就是数组的首地址,用数组名作函数参数时所进行的传送只是地址的传送,也就是说把实参数组的首地址赋予形参数组名。形参数组名取得该首地址之后,也就等于有了实实在在的数组。实际上是形参数组和实参数组为同一数组,拥有同一段内存空间。这种传值方式成为按引用传递。
注意:形参中给出数组长度是没有意义的,编译器并不为它分配内存,将上面 aver 函数的形参改为 float a[1]、float a[100] 依然是正确的。所以一般用指针变量来代替,可以改为float *a。
关于c语言数组的一些疑惑?
array[10] =5;因此,对于使用数组array[10](这里,你要把array[10]理解成含有10个元素的数组array,而不能理解成第10号元素)做形参,只写array[]即可(只写一个空的中括号)。但是,数组做形参时,C语言支持中括号里面写入数字,如array[0]、array[1]或array[10]等,但它们都是一样的,作用...
C语言数组作为形参实参的一些疑惑?
1.数组里面带元素个数:void fun(int arr[常数], int n);这里的常数可以是任意正整数,实际上编译器是会忽略,因为这里只要告诉编译器我接收的是一个数组指针,至于它有多少个元素不关心,因为实参也只是传个地址过来。元素个数由参数二控制。至于为什么要这么约定可以看下面补充说明。2.void fun(int...
c语言数组问题
问一:c语言开辟数组,如果里面存的是整数,那么没有复制之前,数组中默认的值为零,还是乱码。答:C语言声明数组变量时,只分配相应的空间和地址,而不对里面存放的数据初始化。不管是int、float、还是char型等,即里面存的无论是整数、小数还是字符,再没有复赋值之前,数组中默认的值都是乱码,而不...
关于C语言中数组定义问题
(1)在堆栈段中分配内存,由于太大无法分配,所以错误。(2)在数据段中分配内存,数据段可以分配,无错误。(3)数组比(1)需要的内存少,在堆栈段大小范围内,可以分配,无错误 (4)同(3)
C语言有关数组的一些疑问,数组可以只有一个元素吗?
AD_num[0] = m1和AD_num = m1是有区别的,前一个是把首个元素赋值为m1,后面AD_num如果是数组名是不能这么赋值的,错误。如果是个指针可以,但是如果m1是个数值编译会有警告。*AD_num=m1是和第一个等价的。数组可以只有一个元素,这个是肯定的。
c语言 关于数组 我们需要注意什么
其中 int 为类型,即整型(还有字符型 char 和float 实型等)a 为数组名 [] 为下标符号,里面的数字常量为 数组的第几号成员元素。例如 a[0]为 数组a[10]的第一号成员元素。这里有点要注意的是,数组元素下标值是从0开始的,即你定义a[10],则他的成员数为a[0]到a[9].千万不要把a[...
C语言 数组指针的一些疑惑不解,下图红线中的第二个不是很理解
说是行地址的时候,表示对这个地址做加1,会移动一行,说是列地址的时候,会移动一列。二维数组a相当于二维常量指针,也就是说是指针的指针,所以说a是行地址,因为对a做加1操作的时候,会指向下一组指针。那么*a表示的相当于一维数组,*(a+1)也是,他们都在这个定义里都相当于一个int b[4],...
c语言关于数组的一个问题
纠正楼上一个说法,注意此处是个语义错误但并不是语法错误;实际编译中编译器可能会出warning但编译是可以通过的,因为c是个弱类型语言,指针和char都被视作数值类型,能够进行各类自动转换。关于题主的问题,注意此处加的是'3'而不是3,即ascii码的51。str偏移51实际造成数组越界。
c语言关于数组长度的疑问
a末尾有"\\0",b没有。题目出得不清楚,“数组长度”指数组有几个数组元素,还是占据内存的长度,还是字符串长度。数组元素个数,a 4个,b 3个 占据内存的长度,sizeof(a)得4 ,sizeof(b)得 3 字符串长度,strlen(a)得3 ,strlen(b)得 3 题目想问的是“字符串长度”,说成“数组长度”。
关于C语言二组字符数组问题?
在C语言中定义数组char name[1][20],那么它的内存大小就指定了1行20个字符大小。不能越界赋值或访问!你对错误的代码看到的结果不能说明任何问题。你想要的是动态数组。应该用malloc和realloc函数来实现动态数组,这里有几个注意点:1、你输入的是字符串长度不定且一个字符串可能会包含空格,所以不...