数组与指针,函数

1、地址由什么组成?
地址是由两部分组成,第一部分是一个指向某一个内存的起始点的指针(即基地址),第二部分是相对于这块内存的起始点的地址偏移量。这种地址结构被称为段地址结构,子程序的调用通常就是通过在栈指针上加上一个地址偏移量来实现的。


2、数组作为参数传递给函数时,不可以通过sizeof得到数组的大小,为什么?
当把数组作为函数的参数时,无法在程序运行时通过数组参数本身告诉函数该数组的大小,因为函数的数组参数相当于指向该数组第一个元素的指针。这意味着把数组传递给函数的效率非常高,也意味着程序员必须通过某种机制告诉函数数组参数的大小。


3、数组的要素?
数组是一种类型,它有三个要素,即 基本类型(数组元素的类型),大小(当数组被说明为不完整类型时除外)、数组的值(整个数组的值)。


4、字符串与数组的区别?
数组的元素可以是任意类型,而字符串是一种特别的数组。
根据处理字符串的不同,语言可以分为两种,一种是简单地将字符串看成一个字符数组,另一种是将字符串看作一种特别的类型。数组的值和数组中第一个元素的地址(或指向该元素的指针)是相同的,因此通常一个C语言字符串和一个字符指针是等价的。


5、无参函数与有参函数的区别?
有参函数比无参函数多了一个内容,即形式参数表列。在形参表列中给出的参数称为形式参数,它们可以是各种类型的变量,各参数之间用逗号间隔。在进行函数调用时,主调函数将赋予这些形式参数实际的值。形参既然是变量,必须在形参表中给出形参的类型说明。


6、函数声明与函数定义的不同。
函数的声明就是声称一个函数的名字,只是说明函数的名字,不涉及函数的实现,即没有函数体,所以函数声明只包括前三个部分。
函数的定义就是确定一个函数的意义,即让函数具有某项功能,但是不是只有函数体,需要指明该函数体是该函数的,所以函数的定义包括了一个函数的所有部分。


7、参数传递需要注意什么?
C语言中在发生有参函数的调用时,实参变量与形参变量之间的数据都是单向的“值传递”方式,包括指针变量和数组名作参数的情况。
不同类型的变量作参数实现的数据传递方式相同,效果不同。所谓方式相同即都是参数间数据单向的“值传递”,效果不同即被调函数能否改变主调函数中变量的值。


8、当数组名作函数参数时,是如何传递的?
数组名本身是一个特殊的指针变量,其值是数组的首地址,因此作为实参时其传给形参的是内存中某指定单元的地址,调用过程中形参数组与实参数组占用同一段内存单元,因此对形参数组的操作也就是对实参数组的操作,对实参数组与形参数组来说数据传递表现为“双向”的,而对实参变量与形参变量而言数据的传递仍然是单向的。




9、回调函数如何定义的?
回调函数是一个通过函数指针调用的函数。当把一个函数指针(函数的入口地址)传递给另一个函数,该函数指针被用来调用它所指向的函数时,我们就说这个函数的回调函数。


10、如何实现printf函数,处理其中的可变函数问题?
在标准C语言中定义了一个头文件专门用来对付可变参数列表,它包含了一组宏和一个va_list的typedef声明。

 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值