我是c语言新手,各位师兄弟帮我看看以下代码的指针引用有什么问题?为何编译器不通过?按书上理解,以下代码逻辑上,我觉得应该是对的,只是做了点小修改,编译器却不通过,望各位师兄弟帮我看看问题出在哪儿?以下代码仅为验证用。
假设引用3行1列的字符:
这种列指针引用能通过,
#include "stdio.h"
fm(int *p, int m, int n)
{
printf("%c",*(p+3*n+1));
}
void main()
{
char weekday[7][10]={"sunday","monday","tuesday","wednesday","thursday","friday","saturday"};
fm(*weekday,7,10);
}
下面的两种情况不分行列指针,按自己逻辑修改并引用,但都通不过:
情况一:
#include "stdio.h"
fm(int *p, int m, int n)
{
printf("%c",*((*p)+3*n+1));
}
void main()
{
char weekday[7][10]={"sunday","monday","tuesday","wednesday","thursday","friday","saturday"};
fm(weekday,7,10);
}
情况二:
#include "stdio.h"
fm(int *p, int m, int n)
{
printf("%c",*(*(p+3*n)+1));
}
void main()
{
char weekday[7][10]={"sunday","monday","tuesday","wednesday","thursday","friday","saturday"};
fm(weekday,7,10);
}
其中:
情况一:数组名做实参,指针变量做形参,引用时指针变量前加“*”后不是行指针转化为列指针了吗?和列指针引用逻辑上不是一样的吗?那为何不能通过呢?
情况二:数组名做实参,指针变量做形参,引用是采用行指针引用法,我认为逻辑上应该也是没有问题的,为何也通不过?
把引用公式改为*(&(*p+3*n)+1))也不行,望师兄弟们指教。
p是第一个元素的地址,*p是第一个元素的值,你后面2种那样取出来都不是合法的内存地址了,怎么取值哦,不符合语法规则。
void fm(char p[][10], int m, int n)
{
printf("%c", *(*(p + 3 ) + 1));
}
void main()
{
char weekday[7][10] = { "sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday" };
fm(weekday, 7, 10);
}
既然如此,那你可以这么用。
void fm(char *p, int m, int n)
{
printf("%c", *(p+n*3+1));
}
void main()
{
char weekday[7][10] = { "sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday" };
fm((char *)weekday, 7, 10);
}
p肯定不能是int指针的,两种类型所占的字节都不一样
您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632