数组、指针、函数的问题解答

1、C语言对数组处理有效的原因:

(1)除少数编译器出于谨慎会做一些繁琐的规定外,C语言的数组下标是在一个很低的层次上处理的。

(2)数组和指针能非常和谐地在一起工作。当数组出现在一个表达式中时,它和指向数组中的第一个元素的指针时等价的,因此数组和指针几乎可以互换使用。此外,使用指针要比使用数组下标快两倍。

(3)唯一一种数组和指针完全相同的情况,在其他情况下,数组和指针并不完全相同

 

2、数组作为参数传递给函数时,可以通过sizeof得到数组的大小吗?

   不可以。当把数组作为函数的参数时,你无法在程序运行时通过数组参数本身告诉函数该数组的大小,因为函数的数组参数相当于指向该数组第一个元素的指针。

   解决的方法:第一种是将数组和表示数组大小的值一起传递给函数,例,memcpy函数就是这样的。第二种是引入某种规则来结束一个数组,例,在C语言中字符串总是以ASCII字符NUL‘0’)结束的,而一个指针数组总是以空指针结束的。

 

3、指针或带下标的数组名都可以访问元素,哪一种更好呢?

   与使用下标相比,使用指针能使C编译程序更容易地产生优质的代码。两种方式中的初始情况和递增运算相同的,作为循环条件的比较表达式也是相同的。间接引用快,而乘法运算较慢。

   这是一种“微效率”现象,它可能对程序的总体效率有影响,也可能没有影响。在某些情况下,乘法运算的开销会降低。

   总而言之,在编写一个可移植性好、效率高的程序时,为了遍历数组元素,使用指针比使用下标能使程序获得更快的速度。

 

4、可以把另外一个地址赋给一个数组名吗?

   不可以。数组名不能被放在赋值运算符的左边(它不是一个左值,更不是一个可修改的左值)。一个数组是一个对象,而它的数组名就是指向这个对象的第一个元素的指针。给数组名赋值是毫无根据的。一个指针的含义是“这里有一个元素,它的前后可能还有其他元素”,一个数组名的含义是“这里是一个数组中的第一个元素,它的前面没有数组元素,并且只有通过数组下标才能引用它后面的数组元素”。因此,假如可以使用指针,就应该使用指针。

 

5、为什么用const说明的常量不能用来定义应该数组的初始大小?

   并不是所有的常量都可以用来定义一个数组的初始大小,在C程序中,只有C语言的常量表达式才能用来定义应该数组的初始大小。

   一个常量表达式的值在程序运行期间是不变的,并且是编译程序能计算出来的一个值。在定义数组的大小时,你必须使用常量表达式。在C++中会增加编译程序的负担,而C编译程序没有这种负担。

 

6、字符串和数组有什么不同?

   数组的元素可以是可以是字类型,而字符串是一种特别的数组,它使用了一种众所周知的,确定长度的规则。

   根据处理字符串的不同,语言课分为两种,一种是简单的将字符串看作一个字符数组,另一种是将字符串看作一种特别的类型。C语言属于前一种,但有一点补充,即C字符串是以一个NUL字符结束的。数组的值和数组中第一个元素的地址(或指向该语速的指针)是相同的,因此通常一个C语言字符串和一个字符指针是等价的。一个数组的长度是任意的;对字符串来说,这种规则就是字符串的最后一个字符是ASCII字符“NUL(‘\0”。

 

7、有无参函数的定义形式:

   无参: 类型标识符 函数名()

{

  语句

}

   有参:  类型标识符 函数名(形式参数表列)

{

  声明部分

  语句

}

 

8、回调函数的作用:

   回调函数就是C语言里面对函数指针的高级应用。回调函数是一个通过函数指针调用的函数。


9、回调函数的应用:

   当我们想通过一个统一的接口实现不同内容的时候,用回调函数来实现就非常合适;任何时候,如果编写的函数必须能够在不同的时刻执行不同的类型的工作或者执行职能由函数调用者定义的工作,都可以用调用函数来实现。

 

10、printf的实现形式:

   函数原型:int printf ( const char* format,....)

   实际调用形式:printf (“%d”,i);

                 printf (“%s”,s);

                 Printf(“the number is %d ,string is:%s”, i,s);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值