C语言 函数 数组

(1)static在修饰main和普通函数中的变量时,都是修饰局部变量,为什么普通函数中的变量可以保持,main中变量不保持?

static修饰局部变量时,变量存放在栈区,生命周期随着语句块执行结束而结束。但使用static修饰变量存放在静态数据区,其生命周期持续到程序结束。

以上有个概念,就是语句块结束和程序结束是不同的,对static修饰的普通函数中的变量而言,语句块结束但是程序并没有结束,有可能接着调用该函数,所以static变量可以保持。但是对于main中的static变量而言,语句块结束,程序也就结束了,static变量也被释放了,所以不会出现保持的情况

(2)如何避免引用时数组和指针的混淆?

char a[]; //定义一个a数组

char *a;//定义一个指针

extern char *a;//系统无法识别是指针还是数组

所以应该extern char a[];

(3)类型标识符和函数名称的区别?

类型标识符和函数名共称为函数头,类型标识符指明了函数的类型,函数类型就是函数返回值的类型。函数名则主要由函数的功能命名,当然也看编程人员的习惯。如:void add()其中void就是类型标识符,说明这个说明该函数无参。

(4)使用指针变量作为函数参数会改变指针变量吗?

不会,函数调用遵循“值传递”原则,实参有固定数值,而形参这接受实参传递的数值,之后对形参的操作不会影响实参。但是作为指针变量的函数参数可能对改变指针所指向的变量的值。

(5)哪几种表达式作为函数参数可能会改变实参?

首先,我们要了解什么情况下形参会改变实参,改变变量一定要改变它的内存单元的地址,什么情况下实参会把地址给形参呢,取地址或者数组名,它们代表了所在地址,这时候实参和形参会共用一段内存单元。所以这时候改变形参就会把实参改变。

(6)C语言中的函数参数的传递有哪几种形式?

值传递和地址传递,值传递会给被传递变量一个内存空间,把传递值复制到这个内存空间里面。所以被传递变量改变不会改变传递变量。但是地址传递,会把传递变量的地址给被传递变量,被传递变量的改变会导致传递变量的改变。

(7)如何编写多个返回值的C语言函数?

一,利用全局变量,首先,在全局定义变量,然后在函数中调用,因为是全局变量,不会因为被调函数的结束而结束。在主函数中还是这些变量,不会改变。二,传递数组指针,把返回值定义为数组,用指针访问。三,结构体指针,把返回值集合为结构体,用指针访问。三个方法其中关键在于如何跨过空间去访问它,全局变量和指针就是不错的方法。

(8)数组的下标都是从0开始吗?数组元素一定要符合数值要求吗?

都是,不一定。比如a[20]虽然是20个元素的要求,但是内部不一定是20个,可能是比20个少。

(9)函数的声明和定义应该在程序的那些位置?

函数的定义可以在程序的任何一个地方,但是如果函数的定义在主函数后面,声明必须在主函数前面,因为你必须让主函数知道它使用的这个函数是声明。

(10)使用下标和指针的数组名都可以访问元素,能个更好?

指针更好,x=a[],x=*p,前者要把数据类型和大小,地址都给x,但是后者仅把数组地址给x就可以了,使用指针更快,占用资源更少。


猜你喜欢

转载自blog.csdn.net/rocky_56x/article/details/79163216