C语言中,用数组名作形参和用指针作形参有区别吗?

作者&投稿:豫力 (若有异议请与网页底部的电邮联系)
在c语言中;用数组名作为实参,那么,形参用指针形式和数组形式都可以吗?~

本质上没区别,你说的题目判断不太了解,可能是你那个题目的问题。

因为在编译的时候数组被看成是指针·~所以没有差别

int
x[10];
int
*p=x;
那么x[1]实际上就是*(p+1)。
p是变量,能存储地址,

数组x是地址常量
//都是被看成地址,只不过一个是变量,一个是常量
至于为什么都能被当成参数
就好比调用函数fun(3);
fun(x)
常量变量都可以。
形参的话写成x[]这样的形式是为了表明指针是指向数组。//只是为了清晰,实质形参都是指针。
而实参就是指针和数目名都可以~~//即实参可以是变量常量,形参都是被看成变量~~

还是有差别的 虽然大多数时候都可以相互用
最大的差别就是指针可以改变,可以通过指针改变指向内容的值,但数组名不行
举个例子:(分别作为形参)
int num[10], *p;
p = num;//此时p指向数组的第一个元素
我在主函数里调用两个函数
1 Sum(num);
2 Sum(p+2,10);
这就有区别了,因为num数组首地址它不能变化,但是此时p指向了数组的第三个元素,而且后面的那个10也是可以改变的,所以说用指针作为形参的时候要带一个int n 表示你要处理的数的个数,所以说用指针作为形参的话会给你一种假象,它的确是指向的数组的某个元素(这要看你的指针移动了,比如说p+2等等,数组名不能移动),但是它仅仅只是一个指针,你可以在调用的函数里用sizeof(num),sizeof(p)求它们的值,就知道为什么总是要加上一个int n了,因为如果不加的话函数就不知道你要操作的数的个数,另外别忘了传递数组和传递一般的int,double等类型是不一样的,传递数组传递的是原数组,函数的操作就改变了原来的数组,而传递一般的数只是传递它的拷贝,对原来的数没有影响;
还有什么不懂的继续交流~~~

有啊..一个是引用,一个是指针~~ 你看C++的相关内容就知道了

指针是指向地址,返回的是地址
而引用指向地址,返回的是值~

定义指针p,数组a[3]={1,2,3},p=a

其中p的值为a[0]地址,而a[0]的值为1

其实就是没啥区别,写法不同。


在C语言中,用数组名作为函数调用时的实参,实际上传递给形参的是...
在C语言中,用数组名作为函数调用时的实参,实际上传递给形参的是首地址。因为数组名传递的是数组的地址也就是第一个元素的地址。例如:a[3]这个数组,3指个数,a[0]指第一个元素,全部元素指a[0]~a[2];那数组名a规定的就是首地址。

C语言中,数组名作为函数参数,属于什么传递,为什么?
C语言中,数组名作为函数参数,属于数组参数传递。在VB6.0中,允许使用数组作为实参传递到子过程的形参中,数组传递必须采用地址传递的方式来传递参数。数组型变量名本身只是该数组所占存储空间的首地址,函数调用时,系统不会为形参分配数组存储空间,而是仅仅分配一个存放数组地址(第一个元素地址)的存储...

在C语言中,数组名可以做加法和减法吗?
C语言中,数组名是一个不可变的指针常量,不能对它进行加、减和赋值运算。在C语言中规定,数组名是代表该数组的首地址且符合标识符书写规定的变量标识符。不能对它进行加、减和赋值运算。整个数组是以首地址开头的一块连续的内存单元。如有字符数组char c[10],设数组c的首地址为2000,也就是说c[...

【C 语言】数组元素和数组名作为函数参数
1)用数组元素作函数参数不要求形参也必须是数组,但是用数组名作函数参数时,则要求形参和相对应的实参都是类型相同的数组。2)在 C 语言中,数组名除作为变量的标识符之外,数组名还代表了该数组在内存中的起始地址,当数组名作函数参数时,实参与形参之间不是“值传递”,而是“地址传递”,实参数组...

C语言中,数组名作为函数调用的实参时,下面叙述正确的是()。
正确的 B 例如:f(int data[]);f(int *data);其实是等价的,都是一个指针传递。上面两种无论那种都可以传递一个数组名,作为实参。实参传递给的数组名,就是数组的首地址。因此通过数组名,传递其实就是把数组的首地址给了形参,因此通过地址就可以改变实参数组相应的值。

C语言中,结构体成员中为什么姓名总是用数组来定义,而其他成员如成绩、序...
因为C语言中,char只能存储一个字符,而名字由多个字符组成,所以要定义为数组。成绩、序号一般都是数字,也有特殊情况,比如:混合数字字母的序号,就要用字符数组定义了。

C语言中,用数组名作形参和用指针作形参有区别吗?
1 Sum(num);2 Sum(p+2,10);这就有区别了,因为num数组首地址它不能变化,但是此时p指向了数组的第三个元素,而且后面的那个10也是可以改变的,所以说用指针作为形参的时候要带一个int n 表示你要处理的数的个数,所以说用指针作为形参的话会给你一种假象,它的确是指向的数组的某个元素(...

在C语言程序中,数组名代表的是 ___ 。
在C语言程序中,数组名表示的是“数组首个元素的地址,而首个元素是int类型”。在C语言中, 数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。数组是一种...

一个c语言中,当用一维数组名A做实参时,是将数组A的什么传递给对应的形...
数组首元素的地址 C中数组名表示数组首元素的地址。例:如果arr是一个数组,则:arr == &arr[0];arr和&arr[0]都表示数组首元素的内存地址。

c语言中怎么用二维数组作为函数参数
二维数组作为函数参数,实参可以直接使用二维数组名,在被调用函数中对形参数组定义可以指定所有维数的大小,也可以省略第一维的大小说明,如:它们是合法且等价,也可以使用如下形式:但不能省略第二维的大小,如下面的定义是不合法的,编译时会出错:因为从实参传递来的是数组的起始地址,如果在形参中不...

德格县13866839573: C语言中,用数组名作形参和用指针作形参有区别吗? -
俟彼右丙: 还是有差别的 虽然大多数时候都可以相互用 最大的差别就是指针可以改变,可以通过指针改变指向内容的值,但数组名不行 举个例子:(分别作为形参) int num[10], *p; p = num;//此时p指向数组的第一个元素 我在主函数里调用两个函数 1 ...

德格县13866839573: C语言中如何用数组名作形参 -
俟彼右丙: 直接用指针就好了,方便,拿上面的例子来改就是: void str(char * b){printf("%s",b); }main(){char a[]="ssssssss";char*p=a;str(p); }

德格县13866839573: 关于c语言 当实参是数组名 形参是指针变量时 -
俟彼右丙: 在C语言,数组无论作为参数还是返回值,都是以指针形式返回或者传递的.在数组中,数组名字代表的是数组第1个元素的地址.比如如下数组. int a[10] = {1,2,3,4,5,6}; 数组名a,实际上相当于&a[0].所以,当实参是数组名,形参是指针变...

德格县13866839573: 形参数组名作为指针变量来处理 -
俟彼右丙: 是这样的 首先指针变量所占内存单元均为4个字节,无论它指向的是什么类型 示例:# include <stdio.h> void fun (int arr[]) { } int main(void) { int a[20]; fun(a); return 0; } 请看,如果arr与a同为数组,那么他应该占80个字节(20个元素,每个元素4个字节) 可实际上arr只占4个字节,所以程序编译时是将arr按指针变量处理的,相当于int *arr

德格县13866839573: C语言题目 编写一函数,将数组a中的8个整数(3,7,11,0,6,7,4,2)按逆序存放 -
俟彼右丙: 程序:/* 编写一函数,将数组a中的8个整数(3,7,11,0,6,7,4,2)按逆序存放(注:要求用数组名作函数的实参,用指针变量做函数的形参)*/#include<stdio.h> void exchange(int *a,int n) { int i,j,temp; for(i=0,j=n-1;i<=j;i++,j--) { temp=a[i]; a[i]=a[j]; a[j]...

德格县13866839573: 比较排序算法中利用指针作为形参和实参与用数组名作为实参和形参有什么相同和不同. -
俟彼右丙: 实参的数组就是数组,而指针就是指针. 形参只存在指针,不存在数组,即使传递数组,或将形参写成数组的形式如int a[],最终得到的还是一个指针.

德格县13866839573: C语言中指针数组的数组名做实参,形参该怎么定义? -
俟彼右丙: 形参是数组时,实参传递的数组名;所以实参是指针数组名的问题应该是一样的,形参应该是指针数组吧,注明是哪种类型的指针数组就行了

德格县13866839573: C语言中数组名作为实参传给被调用的函数时,形参获得的是什么 -
俟彼右丙: C语言中数组名作为实参传给被调用的函数时,形参获得的是数组的起始地址. 还是用例子说话吧. #include<stdio.h> int *arry(int *a) {int *b;b = a;int i; for(i=0;i<5;i++){printf("%d",a[i]);} return b; } int main() {int a[5] = {1,2,3,4,5};int *c;...

德格县13866839573: C语言中,调用函数的实参是数组名,被调用函数的形参可不可以是指针 -
俟彼右丙: 可以.是数组也行,如: void f1(int a[]) {} void f2(int *p) {} int a[]={1,2,3}; f1(a); f2(a);

德格县13866839573: 为什么指针变量和数组名都可以当形参或者实参?求详解 -
俟彼右丙: 因为在编译的时候数组被看成是指针·~所以没有差别 如 int x[10]; int *p=x; 那么x[1]实际上就是*(p+1).p是变量,能存储地址, 而 数组x是地址常量 //都是被看成地址,只不过一个是变量,一个是常量至于为什么都能被当成参数 就好比调用函数fun(3); fun(x) 常量变量都可以.形参的话写成x[]这样的形式是为了表明指针是指向数组.//只是为了清晰,实质形参都是指针.而实参就是指针和数目名都可以~~//即实参可以是变量常量,形参都是被看成变量~~

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网