扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
不可能达到目的。因为C语言中没有引用这类型,C++才有。另,C/C++都不支持传递数组,只能传递数组的首元素或行指针,所以即使是C++,也只能传递数组指针的引用,而不可能传递数组的引用,因为数组没有引用。
创新互联专注于企业营销型网站、网站重做改版、榆树网站定制设计、自适应品牌网站建设、HTML5、购物商城网站建设、集团公司官网建设、成都外贸网站建设公司、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为榆树等各大城市提供网站开发制作服务。
#include stdio.h
#include cstring
int k=1000;
char* find(char *a)
{
//char b[k];
/*最好将b的定义形式写成下面static的形式。常规定义会出现警告,而且可能会输出异常
因为数组b会随着函数结束而被释放内存,强行返回则会出现内存溢出
定义成静态形式,则数据不会因为函数结束而被释放内存,但是静态数组大小受到限制,
看你自己的实际情况选择*/
static char b[50];
int j=0;
for(int i=0;istrlen(a);i++)
{
if(a[i]='0'a[i]='9')
{
b[j]=a[i];
j++;
}
}
return b;
}
int main()
{
char a[k];
printf("请输入字符串:\n");
scanf("%s",a);
char *c=find(a);
printf("字符串中数字有:\n");
printf("%s\n",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\nb=%d\n", 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\nb=%d\n", 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] != '\0'; 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);
}
不过问题是如果这样,无法把握数组结束(除非知道数组长度)。而对于字符数组(上例),由于字符串末尾有结束标志'\0'(ascii码正好是0),所以就很容易利用指针来判断字符串是否结束。
扩展资料:
调用带参数的函数:
在调用函数时,可以向其传递值,这些值被称为参数。
这些参数可以在函数中使用。
可以发送任意多的参数,由逗号 (,) 分隔:
myFunction(argument1,argument2)。
当声明函数时,请把参数作为变量来声明:
function myFunction(var1,var2){这里是要执行的代码}。
变量和参数必须以一致的顺序出现。第一个变量就是第一个被传递的参数的给定的值,以此类推。
按值传递参数:
按值传递参数时,是将实参变量的值复制一个到临时存储单元中,如果在调用过程中改变了形参的值,不会影响实参变量本身,即实参变量保持调用前的值不变。
按值传递参数时,需要在参数名前加"ByVal"关键字。
按地址传递参数:
按地址传递参数时,把实参变量的地址传送给被调用过程,形参和实参共用内存的同一地址。在被调用过程中,形参的值一旦改变,相应实参的值也跟着改变。
如果实参是一个常数或表达式,Visual Basic 6.0会按"传值"方式来处理,按地址传递不需要"ByVal"关键字。
按数组传递参数:
在VB6.0中,允许使用数组作为实参传递到子过程的形参中,数组传递必须采用地址传递的方式来传递参数。数组参数在传递时应注意以下两个方面:
① 在实参和形参列表中只写数组名,忽略维数的定义,但圆括号不能省,当数组作为参数传递时,系统将实参数组的起始地址传给过程,使形参数组也具有与实参数组相同的起始地址,若参数是多维数组,每维以逗号分隔。
② 被调过程可分别通过Lbound和Ubound函数确定实参数组的下界和上界。
参考资料来源:百度百科-参数传递
参考资料来源:百度百科-字符串
在主函数里面,sizeof是数组占的空间
在作为参数时,会被转为指针
所以在函数里面打印的是sizeof(char*)
对于任意指针,sizeof的值都是当前编译器位数。你的是32位编译器,输出就是4
ps:4字节=32位
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流