题目:将一组数组中的内容打印出来,例如数组arr中存在一组数据—-arr[10]={1,2,3,4,5,6,7,8,9,10}要将这组数据打印出来。

第一种:传统做法,利用循环,设置计数器依次访问没个数组下标。

代码如下:

int main() {int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int i = 0;for (i = 0; i < 10; i++) {printf("arr[%d]=%d\n",i,arr[i] );//i表示数组下标//}return 0;}

输出格式:

备注:因为数组下标从零开始计数,所以初始数组下标为0(arr[0]),因为只有十个数据,所以末尾下标为arr[9]。

第二种方法:利用指针

指针:指针变量是用来存放内存地址的变量,在同一CPU构架下,不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同。

&:取地址操作符,*(指针变量和解引用操作符)。

int*p=&a(将a地址取出存放在p里面),*p==a;

代码如下:

int main() {int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int* p = &arr[0];//取出第一个数组的地址放在p中//int i = 0;for (i = 0; i < 10; i++) {printf("arr[%d]=%d\n" ,i,* p);//*解除对地址的引用,*p=arr[i]p++;//p加一访问下一个地址//}return 0;}

输出样例:

上面代码可以改写为 :

int main() {int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int* p = &arr[0];int i = 0;for (i = 0; i < 10; i++) {printf("arr[%d]=%d\n",i, *(p+i));//利用i变化来改变*p的变化//}return 0;}

输出样例 :

备注;利用i来改变*p每次访问的地址。

如果要倒着打印:只需将最后一个数组的地址存给P,即int*p=arr[10]。

因为要倒着打印所以地址也要倒着访问,则*(p+i)要改为*(p-i).

代码如下:

int main() {int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int* p = &arr[9];//存储最后一位数组地址int i = 0;for (i = 0; i < 10; i++) {printf("arr[%d]=%d\n",i ,*(p-i));//利用i变化来控制*p对地址的访问//}return 0;}

输出用例:

如果有其他方法欢迎补充学习