野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9305|回复: 15

关于c二维数组指针调用 求助大神

[复制链接]
发表于 2018-6-22 21:05:25 | 显示全部楼层 |阅读模式
#include <stdio.h>
#include <string.h>
int e(int *m,int *l)
{
    int i;
    for(i=0;i<2;i++)
    {
        if(memcmp(&m,l,3)==0) {return i; break;}
    }
}
int main()
{
   int a[2][3]={{1,2,3},{10,5,6}};
   int b[3]={10,5,6};
}
运行后结果为0;求助大神指导
回复

使用道具 举报

 楼主| 发表于 2018-6-22 21:09:55 | 显示全部楼层
#include <stdio.h>
#include <string.h>
int e(int *m,int *l)
{
    int i;
    for(i=0;i<2;i++)
    {
        if(memcmp(&m,l,3)==0) {return i; break;}
    }
}
int main()
{
   int a[2][3]={{1,2,3},{10,5,6}};
   int b[3]={10,5,6};
       
   int q=0;
        q=e(a,b);
       
   printf("%d",q);
   
   return 0;
}
没发全。。
回复 支持 反对

使用道具 举报

发表于 2018-6-22 21:33:16 来自手机 | 显示全部楼层
应该把&m改为&m[i][0]  ?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-22 21:57:46 | 显示全部楼层
flyleaf 发表于 2018-6-22 21:33
应该把&m改为&m[0]  ?

编译出错 /tmp/555037717/main.c:8:24: error: subscripted value is not an array, pointer, or vector
现在有个问题 一个一维数组和多少个一维数组 做比较找到相等的 返回其位置 再做状态机,现在的想通过构建一个二维数组进行比较 出现上述问题 暂时没有想到别的方法 请指导 谢谢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-23 00:20:33 | 显示全部楼层

#include <stdio.h>
#include <string.h>
int e(int m [][3],int l [])
{
    int i = 0;
    for(i;i<2;i++)
    {
        //if( memcmp(&m[i],l,3) == 0 ) {return 1;}
               
                if(m[i][0] == l[0] && m[i][1] == l[1] && m[i][2] == l[2]){
                        return 1;
                }
    }
}
int main()
{
   int a[2][3]={{1,2,3},{10,5,6}};
   int b[3]={10,5,6};
        
   int q=0;
       q=e(a,b);
        
   printf("%d",q);
   
   return 0;
}
用这个函数可以的 有大神可以讲下指针的操作吗
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-23 00:24:23 | 显示全部楼层
星子333 发表于 2018-6-22 21:57
编译出错 /tmp/555037717/main.c:8:24: error: subscripted value is not an array, pointer, or vector  ...


#include <stdio.h>
#include <string.h>
int e(int m [][3],int l [])
{
    int i = 0,j=0;
    for(i;i<2;i++)
    {
        //if( memcmp(&m,l,3) == 0 ) {return 1;}
                j++;
                if(m[0] == l[0] && m[1] == l[1] && m[2] == l[2]){
                        return j;
                }
    }
}
int main()
{
   int a[2][3]={{1,2,3},{10,5,6}};
   int b[3]={10,5,6};
        
   int q=0;
       q=e(a,b);
        
   printf("%d",q);
   
   return 0;
}
   
回复 支持 反对

使用道具 举报

发表于 2018-6-23 08:34:15 | 显示全部楼层
星子333 发表于 2018-6-22 21:57
编译出错 /tmp/555037717/main.c:8:24: error: subscripted value is not an array, pointer, or vector  ...

就是上面m指针要随着i改变,你的代码没体现出来
回复 支持 反对

使用道具 举报

发表于 2018-6-23 10:01:47 | 显示全部楼层
一维数组与二维数组混合使用,很明显的错误啊;
没弄明白你要实现的功能是什么?

回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-23 10:16:12 | 显示全部楼层
本帖最后由 星子333 于 2018-6-23 10:20 编辑
flyleaf 发表于 2018-6-23 08:34
就是上面m指针要随着i改变,你的代码没体现出来

if( memcmp(&m(i),l,3) == 0 ) {return 1;}
这个有 也不行的 可以通过编译
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-23 10:17:40 | 显示全部楼层
Brave000 发表于 2018-6-23 10:01
一维数组与二维数组混合使用,很明显的错误啊;
没弄明白你要实现的功能是什么?

一个一维数组与二维数组内的一维数组比较 如果相等 返回二维数组中的那个一维数组的地址  谢谢了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-23 10:19:54 | 显示全部楼层
星子333 发表于 2018-6-23 10:16
if( memcmp(&m,l,3) == 0 ) {return 1;}
这个有 也不行的 可以通过编译

为什么 &m【i】 显示不出
回复 支持 反对

使用道具 举报

发表于 2018-6-23 10:21:30 | 显示全部楼层
星子333 发表于 2018-6-23 10:19
为什么 &m【i】 显示不出

应该是 &(m+i*3)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-23 10:34:39 | 显示全部楼层

不行的 编译不通  error: (201) taking the address of this object is illegal
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-23 12:56:07 | 显示全部楼层
结贴

#include <stdio.h>
#include <string.h>
unsigned char e(unsigned char (*m)[3],unsigned char *l)
{
    unsigned char i;
    for(i=0;i<3;i++)
    {
        if(memcmp(m[i],l,3)==0) {return i;}
    }
}
int main()
{
   unsigned char a[2][3]={{10,5,6},{1,2,3}};
   unsigned char b[]={1,2,3,5,6,9,6};
        
   int q=0;
    q=e(a,b);
        
   printf("%d",q);
   
   return 0;
}
已经过测试
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-23 13:22:54 | 显示全部楼层
大神总结:原贴链接:http://guoyiqi.iteye.com/blog/1626922

二维数组的函数参数传递的问题,以前解决过好几次,总还是忘记,这回总结出来写在这里。

#include <stdio.h>
/*********************************
* 方法1: 第一维的长度可以不指定 *
*                但必须指定第二维的长度 *                             
*********************************/
void print_a(int a[][5], int n, int m)     
{
          int i, j;
           
          for(i = 0; i < n; i++)
          {
                      for(j = 0; j < m; j++)
                            printf("%d ", a[j]);
                             
                      printf("\n");
          }
}
/*****************************************
*方法2: 指向一个有5个元素一维数组的指针 *
*****************************************/
void print_b(int (*a)[5], int n, int m)         
{
          int i, j;
           
          for(i = 0; i < n; i++)
          {
                      for(j = 0; j < m; j++)
                            printf("%d ", a[j]);
                      printf("\n");
          }
}
/***********************************
*方法3: 利用数组是顺序存储的特性, *
*              通过降维来访问原数组!          *
***********************************/
void print_c(int *a, int n, int m)                           
{
          int i, j;
           
          for(i = 0; i < n; i++)
          {
                      for(j = 0; j < m; j++)
                            printf("%d ", *(a + i*m + j));
                             
                      printf("\n");
          }
}
int main(void)
{
        int a[5][5] = {{1, 2}, {3, 4, 5}, {6}, {7}, {0, 8}};
         
        printf("\n方法1:\n");   
        print_a(a, 5, 5);
         
        printf("\n方法2:\n");   
        print_b(a, 5, 5);   
         
        printf("\n方法3:\n");   
        print_c(&a[0][0], 5, 5);
         
        getch();
        return 0;
}
回复 支持 反对

使用道具 举报

发表于 2018-6-26 13:50:33 | 显示全部楼层
星子333 发表于 2018-6-23 13:22
大神总结:原贴链接:http://guoyiqi.iteye.com/blog/1626922

二维数组的函数参数传递的问题,以前解决 ...

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-6-19 01:15 , Processed in 0.031873 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表