第五章 数组与指针

1.C语言对数组的处理非常有效的原因?

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

(2) 数组和指针能非常和谐地在一起工作。

(3) 数组和指针有可能出现完全相同的情况。

2.数组与指针的区别?

对于数组来说,数组名就是数组在内存存放的数组首元素地址。指针变量是用于存放变量的地址,可以指向变量,当然也可存放数组的首址或数组元素的地址,也就是说,指针变量可以指向数组或数组元素,对数组而言,数组和数组元素的引用,也同样可以使用指针变量。

3.字符串和数组有什么不同?

数组的元素可以是任意一种类型,而字符串是一种特别的数组,它使用了一种众所周知的、确定长度的规则。一个数组的长度可以是任意的,当数组名用作函数的参数时,函数无法通过数组名本身知道数组的大小,必须引入某种规则。对字符串来说,这种规则就是字符串的最后一个字符是ASCII字符' \0 '。

4.array_name 和&array_name 有什么不同?

前者是指向数组中第一个元素的指针,后者是指向整个数组的指针

5.字符串和数组有什么不同?
数组的元素可以是任意一种类型, 而字符串是一种非凡的数组,它使用了一种众所周知的、确定长度的规则。
根据处理字符串的不同,语言可分为两种,一种是简单地将 字符串看作一个字符数组,另一种是将字符串看作一 种非凡的类型。C语言属于前一一种,但有一 点补充,即C字符串是以一个NUL字符结束的。数组的值和数组中第一个 元素的地址(或指向该元素的指针) 是相同的,因此通常一个C语言字符串和一一个字符指针是等价的。
一个数组的长度可以是任意的,当数组名用作函数的参数时,函数无法通过数组名本身知道数组的大小,因此必须引入某种规则。对字符串来说,这种规则就是字符串的最后一一个字符是ASCII字符“NUL(0)”。

6.为什么说指针是变量?

1) 系统为指针分配内存空间;

2) 指针有自己的地址;

3) 指针能够存值,但这个值比较特殊---地址。

7.指针算数运算的两种形式?

第一种:  指针 ± 整数

这种形式只能用于指向数组中某个元素的指针,这类表达式的结果类型也是指针。

对一个指针加n使它向右移动n个元素的位置,减n则是向左移动n个元素的位置。如果进行加减法运算后,指针指向的位置不在数组范围内,会发生数组越界。

第二种:  指针 - 指针

只有当两个指针都指向同一个数组中的元素时,才允许一个指针减去另一个指针。

减法运算的值是两个指针在内存中的距离。

8.指针常量和常量指针的区别?

常量指针指向的内容不可变,但地址可以改变,即指针可以指向别的地址;而指针常量是指指针本身不可变,而内容可以修改。

9.空指针有哪几种用法?

1) 用空指针终止对递归数据结构的间接引用,递归是指一个事物由这个事物本身来定义。

2) 用空指针进行函数调用失败时的返回值。

3) 用空指针作警戒值。

10.指针数组和数组指针的区别?

指针数组:用于存储指针的数组,也就是数组元素都是指针

定义 int *p[n];

[]优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组,它有n个指针类型的数组元素。这里执行p+1时,则p指向下一个数组元素, *p=a; 这里*p表示指针数组第一个元素的值,a的首地址的值。

数组指针:指向数组的指针

数组指针(也称行指针):定义 int (*p)[n];

()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度

11.函数指针和指针函数的区别?
(1)函数指针:即指向这个函数的指针,定义为“数据类型(*fun)(参 数列表),",先级比*高,所以*fun 加括号,如“void (*fun)(int*,int*);"。
(2)指针函数:即返回值是指针的函数,定义为“数据类型* fun(参数列表);”,如“chedfiun(int*,int*);",即返回值为char*型。
在C语言中,变量有它的地址,同理函数也是有地址的,那么把函数的地址赋给函数指针,再通过两数指针调用这个函数就可以了。
第一步:定义函数指针,如“int (*pfun)(int* ,int*);"。

第二步:定义函数,如“int fun(int,int*);"。

第三步:把丽数的地址赋给函数指针,即“pfun=fun;".

第四步:通过函数指针去调用这个函数“(*pfun)(p,q);", pfun 是函数的地址,那么*pfun当然就是函数本身了。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值