C 数组指针(在同一行中声明和定义会给出垃圾值,而在不同的行中则工作得很好)
我用的是turboc 当我以不同的方式声明和定义指针k时,它给出了警告“不可移植指针转换”,而*k的结果显示为垃圾C 数组指针(在同一行中声明和定义会给出垃圾值,而在不同的行中则工作得很好),c,pointers,C,Pointers,我用的是turboc 当我以不同的方式声明和定义指针k时,它给出了警告“不可移植指针转换”,而*k的结果显示为垃圾 #include<stdio.h> #include<conio.h> void main() { int i,j,*k;//declaration int a[3][5] = { { 1, 2, 3, 4, 5 }, {6, 7, 8, 9, 10 }, { 11, 12, 13, 14, 15 } }; *k = &a ; //definatio
#include<stdio.h>
#include<conio.h>
void main()
{
int i,j,*k;//declaration
int a[3][5] = {
{ 1, 2, 3, 4, 5 },
{6, 7, 8, 9, 10 },
{ 11, 12, 13, 14, 15 }
}; *k = &a ; //defination
clrscr();
printf("%d\n",*k);//garbage value
printf("%d\n",*(k+2));//garbage value
printf("%d\n",*(k+3)+1);//garbage value
printf("%d\n",*(k+5)+1);//garbage value
printf("%d\n",++*k);//garbage value
getch();
}
#包括
#包括
void main()
{
int i,j,*k;//声明
INTA[3][5]={
{ 1, 2, 3, 4, 5 },
{6, 7, 8, 9, 10 },
{ 11, 12, 13, 14, 15 }
};*k=&a;//定义
clrsc();
printf(“%d\n”,*k);//垃圾值
printf(“%d\n”,*(k+2));//垃圾值
printf(“%d\n”,*(k+3)+1);//垃圾值
printf(“%d\n”,*(k+5)+1);//垃圾值
printf(“%d\n”,++*k);//垃圾值
getch();
}
当在同一行中定义和声明指针k时,它给出结果
#include<stdio.h>
#include<conio.h>
void main()
{
int i,j;
int a[3][5] = {
{ 1, 2, 3, 4, 5 },
{ 6, 7, 8, 9, 10 },
{ 11, 12, 13, 14, 15 }
}, *k = &a ;
clrscr();
printf("%d\n",*k); //1
printf("%d\n",*(k+2)); //3
printf("%d\n",*(k+3)+1); //5
printf("%d\n",*(k+5)+1); //7
printf("%d\n",++*k); //2
getch();
}
#包括
#包括
void main()
{
int i,j;
INTA[3][5]={
{ 1, 2, 3, 4, 5 },
{ 6, 7, 8, 9, 10 },
{ 11, 12, 13, 14, 15 }
},*k=&a;
clrsc();
printf(“%d\n”,*k);//1
printf(“%d\n”,*(k+2));//3
printf(“%d\n”,*(k+3)+1);//5
printf(“%d\n”,*(k+5)+1);//7
printf(“%d\n”,++*k);//2
getch();
}
此问题取自“letusC”
我们将非常感谢您的回复在声明后的第一个代码中:
*k = &a ; //defination
导致未定义的行为,因为k
未初始化,指向垃圾位置
您应该将其更正为k=*a代码>
而在第二个代码中,您在声明时分配地址
首先,&a
的类型是int(*)[3][5]
,a
的类型是int(*)[5]
。*a
的类型是int[5]
,它很容易衰减intint*
其次,表达式*k=&a
的k
类型为int*
(而*k
类型为int
),您可能会在这两个代码中得到警告
分配二维数组中第一个元素的地址;检查以下内容:
第一个代码:
int *k;
int a[3][5] = {..........};
k = *a;
检查工作代码@
第二个代码:
int a[3][5] = {.........}, *k = *a;
检查工作代码@
要理解它,请阅读:
和
int*k=&a
与int*k相同;k=&a代码>,而不是int*k*k=&a代码>感谢格里耶什,感谢你对我的概念提出的宝贵帮助,即使在我提出k=a之后;代码给出错误“无法将int[3][5]转换为int*”@anki suggestionk=a
是错误的,我的错误,请使用工作代码链接检查更新的answes。感谢@Grijesh现在我理解了**感谢您的帮助**希望您继续回答问题(其他问题)。@anki是的,我会回答(如果我能够回答的话)…我的建议是,如果你不读LetUs-C,这是一本过时的基于dos的书。@anki从以下链接中选择一本书: