当前位置:首页 » 编程语言 » c语言二维字符数组传参数
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言二维字符数组传参数

发布时间: 2022-05-20 05:18:52

‘壹’ c语言:字符串做为函数参数传递

1、值传递

void swap(int x,int y)

{ int temp = x;

x = y;

y = temp;

}void main()

{

int a = 10, b = 20;

swap(a, b);

}

执行后,并不会交换。

2、引用传递

void swap(int &x,int &y)

{ int temp = x;

x = y;

y = temp;

}void main()

{

int a = 10, b = 20;

swap(a, b);

printf("a=%d b=%d ", a, b);

}

执行后,发生交换。

3、指针传递

void swap(int *x,int *y)

{ int temp = *x; *x = *y; *y = temp;

}void main()

{

int a = 10, b = 20;

swap(&a, &b);

printf("a=%d b=%d ", a, b);

}

执行后,发生交换。

参数传递只有上面三种,但是如果加上数组,就会产生几种新形式。

首先,明确数组型变量名本身只是该数组所占存储空间的首地址:

int a[3] = { 1, 2, 3 }; int *p = a; //等价于下行 //int *p = &a[0];

printf("%d", *p);

典型的数组做参数。

void fun(char s[]){ for (int i = 0; s[i] != ''; i++)

printf("%c", s[i]);

}void main()

{ char str[] = "Hello World!";

fun(str);

}

函数调用时,这里系统不会为形参分配数组存储空间,而是仅仅分配一个存放数组地址(第一个元素地址)的存储空间,此后,将实参数组的首地址传递给形参变量。

其实本质与下相同,只不过还是数组形式的(数组名代替指针)。

既然数组型变量名本身只是该数组所占存储空间的首地址,我们当然可以用指针做形参来接收数组实参。

void fun(char *p){ while (*p)

{

printf("%c", *p);

p++;

}

}void main()

{ char str[] = "Hello World!";

fun(str);

}

不过问题是如果这样,无法把握数组结束(除非知道数组长度)。而对于字符数组(上例),由于字符串末尾有结束标志''(ascii码正好是0),所以就很容易利用指针来判断字符串是否结束。

(1)c语言二维字符数组传参数扩展阅读:

调用带参数的函数:

在调用函数时,可以向其传递值,这些值被称为参数。

这些参数可以在函数中使用。

可以发送任意多的参数,由逗号 (,) 分隔:

myFunction(argument1,argument2)。

当声明函数时,请把参数作为变量来声明:

function myFunction(var1,var2){这里是要执行的代码}。

变量和参数必须以一致的顺序出现。第一个变量就是第一个被传递的参数的给定的值,以此类推。

按值传递参数:

按值传递参数时,是将实参变量的值复制一个到临时存储单元中,如果在调用过程中改变了形参的值,不会影响实参变量本身,即实参变量保持调用前的值不变。

按值传递参数时,需要在参数名前加"ByVal"关键字。

按地址传递参数:

按地址传递参数时,把实参变量的地址传送给被调用过程,形参和实参共用内存的同一地址。在被调用过程中,形参的值一旦改变,相应实参的值也跟着改变。

如果实参是一个常数或表达式,Visual Basic 6.0会按"传值"方式来处理,按地址传递不需要"ByVal"关键字。

按数组传递参数:

在VB6.0中,允许使用数组作为实参传递到子过程的形参中,数组传递必须采用地址传递的方式来传递参数。数组参数在传递时应注意以下两个方面:

① 在实参和形参列表中只写数组名,忽略维数的定义,但圆括号不能省,当数组作为参数传递时,系统将实参数组的起始地址传给过程,使形参数组也具有与实参数组相同的起始地址,若参数是多维数组,每维以逗号分隔。

② 被调过程可分别通过Lbound和Ubound函数确定实参数组的下界和上界。

参考资料来源:网络-参数传递

参考资料来源:网络-字符串



‘贰’ c语言字符型数组传入函数

在主函数里面,sizeof是数组占的空间
在作为参数时,会被转为指针
所以在函数里面打印的是sizeof(char*)
对于任意指针,sizeof的值都是当前编译器位数。你的是32位编译器,输出就是4
ps:4字节=32位

‘叁’ c语言怎么把二维数组的字符串给到一维数组

按元素赋值:
遍历一维数组,并将每个元素赋值到二维数组的对应元素上。
或者遍历二维数组,将每个元素赋值为一维数组对应值上。
优点为操作灵活,可以按照需要任意赋值。
2 当一维数组和二维数组类型相同,而且赋值顺序与一维数组中的存储顺序完全相同时,可以用memcpy的方式,直接一次性赋值。
如一维数组为a,二维数组为b,基础类型为TYPE,需赋值元素个数为n,可以调用
memcpy(b,a,sizeof(TYPE)*n);
该方法有点为操作简单,执行效率高。
不过所需满足的前提条件多。在满足上述所有条件时,用memcpy的方式更为简单。

个就是apply的一个巧妙的用处,可以将一个数组默认的转换为一个参数列表([param1,param2,param3] 转换为 param1,param2,param3) 这个如果让我们用程序来实现将数组的每一个项,来装换为参数的列表。

‘肆’ C语言中二维字符数组应该怎样赋值

二维数组赋值的一般形式是:dataType arrayName[length1][length2]。result二维字符数组可以这样赋值,result[0][0]=seq1[0] ;result[1][0]=seq2[0]。

dataType arrayName[length1][length2],其中,dataType 为数据类型,arrayName 为数组名,length1 为第一维下标的长度,length2 为第二维下标的长度。

例如:int a[3][4],定义了一个3行4列的数组,共有3×4=12个元素,数组名为a,即:

a[0][0], a[0][1], a[0][2], a[0][3]

a[1][0], a[1][1], a[1][2], a[1][3]

a[2][0], a[2][1], a[2][2], a[2][3]

在二维数组中,要定位一个元素,必须给出一维下标和二维下标,就像在一个平面中确定一个点,要知道x坐标和y坐标。例如,a[3][4] 表示a数组第3行第4列的元素。

(4)c语言二维字符数组传参数扩展阅读:

二维数组的地址计算

有二维数组A[m][n],设a[p][q]为A的第一个元素,即二维数组的行下标从p到m+p,列下标从q到n+q,按“行优先顺序”存储时则元素a[i][j]的地址计算为:

LOC(a[i][j]) = LOC(a[p][q]) + ((i − p) * n + (j − q)) * t

按“列优先顺序”存储时,地址计算为:

LOC(a[i][j]) = LOC(a[p][q]) + ((j − q) * m + (i − p)) * t

存放该数组至少需要的单元数为(m-p+1) * (n-q+1) * t 个字节

‘伍’ C语言关于二维字符数组的使用

这是c语言里字符数组的常见错误。

c语言里给字符数组赋值很麻烦,
像char string[10]; string = “aaa”;这样的语句不能用来给字符数组赋值。
这种方法只有在定义的时候才能用 如char string[10] = “aaa”;

你的关于二维数组的想法是对的,你的a[m][n]里,每个a[m]就相当于上述的string[10]的string,存放着数组的首地址。

错的就是赋值的方法,可以#include<string.h>然后用strcpy(a[i],"ZQU");

strcpy()这个函数就是字符串复制 string 。

‘陆’ 如何在C语言的程序中将动态分配的二维数组当做一个参数传入某个函数

我不明白,如果两个维度都不是事先确定,你上面要怎么定义?

arr[][4];

好吧,如果你说的那个可行

那就传那两个维度进去。
前面arr[i][j]
那么就void func(int i,int j,int num)
我不敢保证在func里面使用到arr[][]的时候貌似能直接使用arr[i][j],我记得这样用会出错。
所以你要运算那个地址。
你想要的比如是5行4列的 arr[5][4]
你要第第二行第二个数
那么就要*(arr+(2-1)*4+2),这样来得到数字

如果你事先就知道这个维度的话,
直接设定个全局变量
然后连数组都不用传进去就可以直接运算的。
数组是记录地址的,会直接修改在原来的地方

‘柒’ C语言中如何将二维字符数组作为函数参数引用传递

不可能达到目的。因为C语言中没有引用这类型,C++才有。另,C/C++都不支持传递数组,只能传递数组的首元素或行指针,所以即使是C++,也只能传递数组指针的引用,而不可能传递数组的引用,因为数组没有引用。

‘捌’ c语言二维字符数组传入函数的问题

既然只传一行,干嘛要用(*)[]型形参?用char *p或char p[]不就足够了?另外,50x1000000的数组大了点,声明全局数组吧,局部数组不支持。

‘玖’ C语言动态分配变长度的二维字符串数组的函数的问题。

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

char**read(intm){//第一维的长度作为形参输入
inti=0,n;
char**a=(char**)malloc(sizeof(char*)*m);//分配第一维的内存
for(i=0;i<m;++i){
printf("inputthelengthofthe%dprovince! ",i+1);
scanf("%d",&n);//读取第二维的长度
getchar();
a[i]=(char*)malloc(sizeof(char)*(n+1));//分配第二维的内存
if(a[i]){
printf(" ");
gets(a[i]);//输入字符串
}
elseexit(-1);
}
returna;
}

intmain(){
inti,n=3;
char**s=read(n);
for(i=0;i<n;++i)
printf("%s ",s[i]);
return0;
}

‘拾’ C语言字符串二维数组申明应用问题

一、
char (*t)[60]表示定义了一个指向大小60的数组的指针t。t+1在内存中跨度就是60个字符大小。
gettext(text,&i);传参text 相当于t=text。那么t,t+1,t+2分别表示text[40][60]的第1行,第2行,第3行。
二、

声明处的参数 char [][60] 就是二维数组。传参行数不定 列数必须60
三、
text是数组名,本身也是一个常量指针(不能改变其值),表示指向数组首地址的指针
四、
同上说明 指向数组首地址的指针可以表示数组