C语言深入学习--checklist2:数组和结构体

1.  你肯定知道,定义int a[10]a[10]这个元素是无效的;

   知道

2.  数组初始化的方法:

   待补充

3.数组和指针有千丝万缕的联系而又不同,你是否对他们在不同情况下的使用进行过详
细的总结?

4. “int calendar[10][20]; ”,这是一个什么样的数组?它拥有 10 数组类型的元素,还
是 20 个?

     int calendar[10][20]:10个长度为20个一维数组;

5.  a[10],数组名本质上是什么?你是否打印过a的值?

答:数组名a本质上是数组一个元素的地址。

6.  你知道几种获取数组的方法?

1a[i],(2*(a+i),3p=a, *(p + i)获取

7.  指针和数组相同吗?什么时候相同?什么时候不同?

指针和数组是不同的。只有如下情况相同:

(1)表达式中的数组名(与声明不同)被编译器当做一个指向该数组的第一个元素的指针:

int a[10],*p,i = 2;

表达式:

p = a;  *(p + i), p = a + i;

(2)下标总是与指针的偏移量相等;

(3)作为函数的参数的数组名,等于指针

更详细地见《C专家编程》

 

 

8.  使用指针和下标访问,那种方式更快?

《C专家编程》对于此问题有如下叙述:

维数组和指针应用所产生的代码并不具有明显的差别。

数组下标是定义在指针基础上的,所以优化器常常可以把他们装换成为更有效率的指针表达式,并生成相应的机器指令;

用指针迭代一个一维数组常常也并不比之终结使用下标迭代一个一位数组来得快。无论是使用指针还是数组,在连续内存地址移动的时候,编译器都必须计算每次前进的步长,计算的方法就是偏移量乘以每个数组元素占用的字节数。

在处理一维数组的时候,指针并不见得比数组更快。C语言把数组下标改写成为指针偏移量的根本原因是指针和偏移量是底层硬件模型说使用的基本模型

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(C语言深入学习--checklist2:数组和结构体)