C 无法访问数组元素?
我有一个数组,我正试图通过增加ptr来访问它的元素,正如这里所建议的…我一定在做一些愚蠢的事情…请帮帮我C 无法访问数组元素?,c,C,我有一个数组,我正试图通过增加ptr来访问它的元素,正如这里所建议的…我一定在做一些愚蠢的事情…请帮帮我 #include <stdio.h> #include <stdlib.h> int main() { int i; char *p1 = "Cnversions"; char *p2 = "Divided"; char *p3 = "Plain"; char *p4 = "Solid"; char *arr
#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;
}
#包括
#包括
int main()
{
int i;
char*p1=“Cnversions”;
char*p2=“分割”;
char*p3=“普通”;
char*p4=“固体”;
char*arr[3];
arr[0]=p1;
arr[1]=p2;
arr[2]=p3;
arr[3]=p4;
对于(i=0;i像arr
这样的数组位于内存中的特定位置,因此增加arr
是没有意义的(增加数组意味着什么?)
相反,您需要创建一个指向数组开头的指针,并递增该指针:
char **ptr = arr;
for(i=0; i<4; i++) {
printf("arr[%d] = %s\n", i, *ptr);
ptr++;
}
char**ptr=arr;
对于(i=0;i请记住,尽管我们倾向于将双指针视为数组,但所有编译器都将它们视为指针。当递增指针时,它会向指针地址添加一个值,该值等于它所指向的数据类型的大小。例如:
int *p;
p = (int *) malloc(sizeof(int));
p
指向一个int
,因此p
的指向数据的大小(通常)为4字节。这意味着当您增加p
时,它将指向比以前大4字节的位置
arr
的类型是char**
,这意味着它是指向char
的指针。现在大多数机器上的指针都是8字节。因此,当你增加arr
时,你实际上是在告诉计算机将arr
设置为指向一个比以前高8字节的地址。在在arr
的情况下,这是一个非法地址,因此您会遇到某种崩溃。不要增加arr
。另外arr
的大小应为4。出于安全原因和良好的编程实践,p1到p4以及arr应声明为const
。