c语言strlen函数用法(c语言 指针函数)

在C语言中,函数的参数不仅可以是整数、小数、字符等具体的数据,还可以是指向它们的指针。用指针变量作函数参数可以将函数外部的地址传递到函数内部,使得在函数内部可以操作函数外部的数据,并且这些数据不会随着函数的结束而被销毁。

是一系列数据的集合,如数组、字符串、动态分配的内存等,不能用一个参数全部传递到函数内部。 只能传递这些指针,并在函数内部通过指针影响它们的数据集合。

在某些情况下,还必须使用指针来处理基本类型的数据,如整数、小数和字符。 一个典型的例子是交换两个变量的值。 有兴趣想学习的同学加入c语言c交流壹496926338组内有很多项目开发和初学者教育视频等着千人参加。

一些初学者用以下方法交换两个变量值:

执行结果:

a=66,b=99

从结果可以看出,a、b的值没有变化,更换失败。 这是因为swap ) )函数内部的a、b和main ) )函数内部的a、b是不同的变量,消耗了不同的内存。 这些不仅名字相同,也没有其他关系。 swap ) ) )交换其内部的a、b的值,不影响其外部(main ) )内部的a、b的值。

使用指针变量作为参数可以很容易地解决上述问题。

执行结果:

a=99,b=66

交换) )函数时,将变量a、b的地址分别赋予p1、p2。 这样,*p1、*p2表示变量a、b本身,交换*p1、*p2的值也就是说交换了a、b的值。 函数执行结束后,p1、p2将被废弃,但它对外部的a、b的影响将“永久化”,不会随着函数的结束而“复原”。

需要注意的是临时变量temp,*p1=*p2; 语句后面的a的值会复盖b的值,如果不先保存a的值,以后就找不到了。

将数组用作函数参数

数组是不能通过参数一次传递到函数内部的一组数据。 要在函数内部操作数组,必须传递数组指针。 下面的示例定义一个函数max ),该函数在数组中查找值最大的元素)。

执行结果:

12 55 30 8 93 27

最大值is 93!

参数intArr只是一个数组指针,函数内部无法通过该指针获得数组长度。 必须将数组长度作为函数参数传递到函数内部。 数组nums的每个元素都是整数,scanf ()在读取用户输入的整数时,必须提供存储整数的内存地址。 nums i是第I个数组元素的地址。

如果使用数组作为函数参数,则参数也可以是“真”数组。 例如,上面的max ) )函数的参数可以记述如下。

int intArr[6]似乎定义了一个包含六个元素的数组(max ) ),可以将数组的所有元素传递给“组合”。

读者也可以省略数组的长度,将形参缩短为以下形式。

实际上,这两种格式的数组定义都是幻想,无论是int intArr[6]还是int intArr[]都不会创建数组,编译器也不会为它们分配内存。 实际的数组不存在,最终转换为int *intArr之类的指针。 也就是说,无论哪种形式都不能用“一个大脑”传递数组的所有要素,必须好好使用数组指针。

int intArr[6]格式仅表示函数期望传递给用户的数组中有六个元素,而不意味着数组中只有六个元素。 实际传递的数组可以有6个以下的元素。

需要强调的是,无论用何种方法传递数组,都无法在函数内部求出数组长度。 因为intArr只是指针,不是真正的数组,所以需要添加参数来传递数组长度。

c语言为什么不允许直接传递数组的所有元素,而必须传递数组指针呢?

参数的传递本质上是代入的过程,代入就是复制存储器。 内存复制是指将一个内存中的数据复制到另一个内存中。 有兴趣想学习的同学加入c语言c交流壹496926338组内有很多项目开发和初学者教育视频等着千人参加。

对于基本类型的数据(如int、float和char ),内存通常只占用几个字节,而内存拷贝速度非常快。 另一方面,数组是一系列数据的集合,数据的数量没有限制,可以很少,也可以成千上万。 将它们复制到内存是一个漫长的过程,可能会显着降低程序的效率。 为了防止手艺不好的程序员编写低效的代码,c语言在语法上不支持数据集合的直接赋值。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注