我有这个数组,我试图通过递增ptr来访问它的元素,正如这里建议的 Trying to find different methods of accessing array elements? ...我必须做一些愚蠢的事......请帮助我!
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i;
char *p1 = "Cnversions";
char *p2 = "Divided";
char *p3 = "Plain";
char *p4 = "Solid";
char *arr[3];
arr[0] = p1;
arr[1] = p2;
arr[2] = p3;
arr[3] = p4;
for(i=0;i<=3;i++)
{
printf("string at arr[%d] is: %s\n",i,*arr);
arr++;
}
return 0;
}
答案 0 :(得分:5)
像arr
这样的数组位于内存中的特定位置,因此增加arr
没有意义(增加数组是什么意思?)
相反,您需要创建一个指向数组开头的指针并递增指针:
char **ptr = arr;
for(i=0; i<4; i++) {
printf("arr[%d] = %s\n", i, *ptr);
ptr++;
}
(另请注意,您需要使arr
四个元素变大,即char *arr[4]
,以容纳您放入其中的四个字符串指针。)
答案 1 :(得分:-1)
请记住,虽然我们倾向于将双指针视为数组,但所有编译器都将它们视为指针。当您递增指针时,它会向指针的地址添加一个值,该值等于它指向的数据类型的大小。例如:
int *p;
p = (int *) malloc(sizeof(int));
p
指向int
,因此p
指向数据的大小(通常)为4个字节。这意味着当您递增p
时,它将指向比以前大4个字节的位置。
arr
的类型是char**
,这意味着它是指向char
的指针。这些天大多数机器上的指针是8个字节。因此,当您递增arr
时,您实际上是在告诉计算机将arr
设置为指向比以前高8个字节的地址。在arr
的情况下,这是一个非法地址,所以你会遇到某种崩溃。