1.数组与指针的区别?
对于数组来说,数组名就是数组在内存存放的数组首元素地址。指针变量是用于存放变量的地址,可以指向变量,当然也可存放数组的首址或数组元素的地址,也就是说,指针变量可以指向数组或数组元素,对数组而言,数组和数组元素的引用,也同样可以使用指针变量。
2.c语言对数组处理有效的原因?
1) 除少数编译器出于谨慎会做一些繁琐的规定,c语言的数组下标是在一个很低的层次上处理的;
2) 数组和指针能非常和谐的在一起工作;
3) 数组和指针有可能出现完全相同的情况。
3.字符串和数组有什么不同?
数组的元素可以是任意一种类型,而字符串是一种特别的数组,它使用了一种众所周知的、确定长度的规则。一个数组的长度可以是任意的,当数组名用作函数的参数时,函数无法通过数组名本身知道数组的大小,必须引入某种规则。对字符串来说,这种规则就是字符串的最后一个字符是ASCII字符' \0 '。
4.为什么说指针是变量?
1) 系统为指针分配内存空间;
2) 指针有自己的地址;
3) 指针能够存值,但这个值比较特殊---地址。
5.指针算数运算的两种形式?
第一种: 指针 ± 整数
这种形式只能用于指向数组中某个元素的指针,这类表达式的结果类型也是指针。
对一个指针加n使它向右移动n个元素的位置,减n则是向左移动n个元素的位置。如果进行加减法运算后,指针指向的位置不在数组范围内,会发生数组越界。
第二种: 指针 - 指针
只有当两个指针都指向同一个数组中的元素时,才允许一个指针减去另一个指针。
减法运算的值是两个指针在内存中的距离。
6.指针常量和常量指针的区别?
常量指针指向的内容不可变,但地址可以改变,即指针可以指向别的地址;而指针常量是指指针本身不可变,而内容可以修改。
7.空指针有哪几种用法?
1) 用空指针终止对递归数据结构的间接引用,递归是指一个事物由这个事物本身来定义。
2) 用空指针进行函数调用失败时的返回值。
3) 用空指针作警戒值。
8.指针数组和数组指针的区别?
数组指针:a pointer to an array,即指向数组的指针
数组指针(也称行指针)
定义 int (*p)[n];
()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度
指针数组:array of pointers,即用于存储指针的数组,也就是数组元素都是指针
定义 int *p[n];
[]优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组,它有n个指针类型的数组元素。这里执行p+1时,则p指向下一个数组元素, *p=a; 这里*p表示指针数组第一个元素的值,a的首地址的值。
9.指针函数和函数指针的区别?
指针函数:
函数声明,此函数有返回值,返回值为int *,返回型为某个类型的指针 指向函数输入口,本质是函数。
函数指针:
函数指针是指向函数的指针变量,即本质是一个指针变量。
声明格式如下: 类型说明符 (*函数名)(参数)
10.const关键字的特点是什么?
const:修饰一个只读变量。 如 const int cc=3 cc是只读变量。只能说明,不能通过cc这个变量去修改它对应内存空间的值。
const int *p 地址p指向的内容不可改变
int * const p 地址p不可改变
const int * const p 地址p和地址p指向的内容两者皆不可改变
原因是const 有就近原则,靠近谁就限制谁。