我正在尝试学习c。
中的指针根据我的理解int *p={1,2,3};
定义了一个指向整数数组的指针,即{1,2,3}
。因此,我推断p[0]
是此数组的第一个元素,即1
。但是我的编译器(dev c ++)没有给出任何值并挂起输出。
如何根据2
查找此数组的其他元素,3
和p
?即有没有办法通过指针变量p获得这些值。请指导。
示例程序:
#include<stdio.h>
#include<conio.h>
main()
{
int *p={1,2,3};
printf("%d\n",p[0]);
getch();
}
更新:
怎么样?int (*p)[3]={1,2,3};
答案 0 :(得分:7)
int *p={1,2,3};
它是无效的C代码。 =
的权限必须是指针类型的值,而不是int
元素的初始化列表。
请启用所有编译器警告并修复它们。
int p[] = {1, 2, 3};
是有效的C代码。它初始化了一组3
int
元素。
答案 1 :(得分:1)
#include <stdio.h>
#include <conio.h>
int main(){
int a[] = {1,2,3};
//int *p={1,2,3};//invalid
int *p1=(int[]){1,2,3};//valid in C99
printf("%d\n", p1[0]);//1
p1=a;
printf("%d\n", p1[0]);//1
//int (*p)[3]={1,2,3};//invalid
int (*p2)[3]=&(int[]){1,2,3};//valid in C99
printf("%d\n", (*p2)[0]);//1
p2 = &a;
printf("%d\n", (*p2)[0]);//1
getch();
return 0;
}
答案 2 :(得分:0)
是的,int (*p)[3]
表示指向3个整数数组的指针(我的指示器也将其称为2维指针),简单来说,它意味着它可以存储2维数组的第1行的地址,当你继续增加p
时,它将指向二维数组的下一行,如下例所示。
int main(void)
{
int ary[2][3]={{1,2,3},{4,5,6}};
int (*p)[3]=ary;
printf("using ary: %d %d\n",p[0],p[1]); // outputs:2686708 2686720
printf("using ptr: %d %d\n",ary[0],ary[1]); //outputs:2686708 2686720
return 0;
}
我认为你忘记了指针的基本属性,它们用于存储其他变量的地址,你不能像在例子中那样初始化指针,这只适用于字符串,我觉得你在尝试以字符串的方式初始化整数指针。
char *ptr="hello"; //correct
char *ptr[]={"hi","bye" } // correct
int *pttr=123; //Not Correct
int *pttr[]={{123},{456}} //Not Correct