基本数组为基础,无法访问数组元素?
问题描述:
嗨朋友, 我是C新手。我想学习它,我在卡片上的某处位置卡住了。请检查下面的程序基本数组为基础,无法访问数组元素?
#include <stdio.h>
#include <stdlib.h>
int arr1[] = {10,20,30,40,50};
int arr2[] = {5,15,25,35,45};
int *main_arr[] = {arr1,arr2};
int main()
{
printf("in first array 0th locatin value is: %d\n",*main_arr[0]);
system("PAUSE");
return 0;
}
通过使用printf的我可以打印在第0个位置值,但没有得到如何访问元素的休息......请帮帮我!
答
你想
...: %d\n",(main_arr[0])[0]);
------------- ->arr1
--- ->arr1[0]
main_arr
指向两个数组arr1
,arr2
。所以main_arr[0]
指向第一个数组的第一个元素。要访问其他元素,请修改第二个[0]
。
另一种选择,但难看更接近当前的代码,是用指针运算。
...s: %d\n",*(main_arr[0]+1));
记住arr[1]
相同*(arr+1)
。
答
main_arr中只有两个指针指向arr1和arr2的地址。
main_arr| ptr to an array | -> arr1
| ptr to an array | -> arr2
所以,你可以使用main_arr[0][1]
访问的arr1
的第二个元素,因为main_arr[0]
点ARR1的第一个元素的地址。
你应该知道,在C,如果p是一个指针,那么这两个p[3]
和3[p]
将评估为*(p + 3 * sizeof(type))
,所以我们假设p = main_arr[0]
,然后p[1]
,这是main_arr[0][1]
,将评估为*(main_arr[0] + 1 * sizeof(int))
,这是相同的值与arr1[1]
。
答
#include <stdio.h>
#include <stdlib.h>
int arr1[] = {10,20,30,40,50};
int arr2[] = {5,15,25,35,45};
int *main_arr[] = {arr1,arr2};
int main()
{
int iter1, iter2;
for(iter1 = 0; iter1 < 2; iter1++){
for(iter2 = 0; iter2 < 5; iter2++){
printf("in first array nth locatin value is: %d\n",(main_arr[iter1][iter2]));
}
}
system("PAUSE");
return 0;
}
我想代码很简单,可以理解?
感谢您的快速回复......请你解释一下它是如何工作的....谢谢! – 2013-02-26 07:30:35
@AyeshaNihal我的解释不清楚吗? – 2013-02-26 07:35:59