回 帖 发 新 帖 刷新版面

主题:一个关于指针型函数的问题

#include<string.h>
#include<stdio.h>
#define N 3
#define M 4
void input_stu(int score[N][M],char no[N][15]){
//输入学生的学号,每门课的成绩,并求总分
    int i,j,s;
    for(i=0;i<N;i++){
        printf("input no[%d]-----score",i);
        s=0;scanf("%s",no[i]);
        for(j=0;j<M-1;j++){
            scanf("%d",&score[i][j]);
            s=s+score[i][j];}
    score[i][M-1]=s;
    }
}
int *search(int score[N][M],char no[N][15],char num[15]){
//根据学号确定该学生成绩的存放位置
    int (*p)[M];int i;int r=0;
    int *p;
    p=&score[0];
    for(i=0;i<N;i++)
        if(strcmp(no[i],num)==0){
            p=p+r;break;}
        else r+=1;
        return p;
}
void main(){
    int score[N][M];
    char no[N][15];
    char num[15];
    int i,*q;
    void input_stu(int score[N][M],char no[N][15]);
    int *search(int score[N][M],char no[N][15],char num[15]);
    input_stu(score,no);
    printf("input num:");
    scanf("%s",num);
    q=search(score,no,num);
    printf("\n%s-----",num);
    for(i=0;i<M;i++)
        printf("%d ",*(q+i));
}
这段代码在VS上编译出错,search函数return p这里的p与函数类型不匹配,但该函数明明是返回指针的函数,想请教大虾,问题出在哪里?谢谢!下面还有错误代码:
1>          d:\microsoft visual studio 10.0\vc\include\stdio.h(304) : 参见“scanf”的声明1>f:\study\cppfiles\helloworld\helloworld\main.cpp(11): warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>          d:\microsoft visual studio 10.0\vc\include\stdio.h(304) : 参见“scanf”的声明
1>f:\study\cppfiles\helloworld\helloworld\main.cpp(23): error C2440: “return”: 无法从“int (*)[4]”转换为“int *”

回复列表 (共2个回复)

沙发

你在  search函数里面 p定义了2次。
还有 search函数里面int (*p)[M]的p的类型是 int (*) [M].serch的返回值是int *类型,很明显类型不匹配,但是 没有类型转换就是用 return p

板凳

谢谢。不过我把int *p删掉以后,还是报错,我不太明白,那个*p[4]不就是指向数组的么,search函数就是返回指针的函数,那么类型应该匹配才对吧?初学指针,还请多指教~

我来回复

您尚未登录,请登录后再回复。点此登录或注册