嗨,朋友们, 我是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个位置打印该值,但无法获取如何访问元素的其余部分...请帮帮我!
答案 0 :(得分:1)
你想要
...: %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)
相同。
答案 1 :(得分: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;
}
我想代码很简单,可以理解吗?
答案 2 :(得分:0)
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]
,然后{ {1}} p[1]
将评估为main_arr[0][1]
,与*(main_arr[0] + 1 * sizeof(int))
的值相同。