免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 14141 | 回复: 27
打印 上一主题 下一主题

二维字符串数组和指针数组的迷惑??传递问题! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-12-18 20:44 |只看该作者 |倒序浏览
#include <stdio.h>
int myprint(char *str,int len);
int main(){
     int len=3;
     char *str[]={
          "this is the test1",
          "this is the test2",
          "this is the test3",
     };
     myprint(str,len);
     return 0;
}

int myprint(char *str,int len){
     int i;
     for(i=0;i<len;i++)
          printf("%s",str[i]);
     return 0;
}
我对这两个概念不是很理解!希望各位指教!
想把二维数组传过去,在打印,也可以把指针数组传过去,在打印,但是我两个都不会实现!

论坛徽章:
0
2 [报告]
发表于 2006-12-18 21:08 |只看该作者
#include <stdio.h>
int myprint(char *str[3],int len);
int main(){
     int len=3;
     char *str[3]={
          "this is the test1",
          "this is the test2",
          "this is the test3",
                     };
     myprint(str,len);
     return 0;
}

int myprint(char *str[3],int len)
{
     int i;
     for(i=0;i<len;i++)
          printf("%s\n", str[i]);
        return 0;
}

论坛徽章:
0
3 [报告]
发表于 2006-12-18 21:13 |只看该作者
这个不行吧,我上机上过了,还是要有错

论坛徽章:
0
4 [报告]
发表于 2006-12-18 21:16 |只看该作者
或者:

#include <stdio.h>
int myprint(char str[][20],int len);
int main(){
     int len=3;
     char str[][20]={
          "this is the test1",
          "this is the test2",
          "this is the test3",
                     };
     myprint(str,len);
     return 0;
}

int myprint(char (*str)[20],int len)
{
     int i;
     for(i=0;i<len;i++)
          printf("%s\n", str[i]);
        return 0;
}

论坛徽章:
0
5 [报告]
发表于 2006-12-18 21:19 |只看该作者
--- int myprint(char *str,int len)
+++ int myprint(char **str,int len)

论坛徽章:
0
6 [报告]
发表于 2006-12-18 21:41 |只看该作者
4楼的可以了应该是二维数组吧,有点了解了呵呵!但是5楼的还是不是很清楚!有谁可以谁一下这两者的关系和差别!我真是搞啊!谢谢各位了!

论坛徽章:
0
7 [报告]
发表于 2006-12-18 21:44 |只看该作者
原帖由 uid500 于 2006-12-18 21:41 发表
4楼的可以了应该是二维数组吧,有点了解了呵呵!但是5楼的还是不是很清楚!有谁可以谁一下这两者的关系和差别!我真是搞啊!谢谢各位了!


指针的指针,对串中的单个字符进行引用。

[ 本帖最后由 langue 于 2006-12-18 21:56 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2006-12-18 21:51 |只看该作者
呵呵!我想想啊!好象是对了!谢谢了!

论坛徽章:
0
9 [报告]
发表于 2006-12-19 09:09 |只看该作者
原帖由 uid500 于 2006-12-18 21:51 发表
呵呵!我想想啊!好象是对了!谢谢了!


理解二维数组,最好自己在纸上画一画数组在内存中是怎么排列的,然后想想不同类型的指针加1会移动几个字节。就容易搞清楚了。

论坛徽章:
0
10 [报告]
发表于 2006-12-19 09:57 |只看该作者

  1. #include <stdio.h>
  2. int myprint(char *str[],int len);
  3. int main(){
  4.      int len=3;
  5.      char *str[]={
  6.           "this is the test1",
  7.           "this is the test2",
  8.           "this is the test3",
  9.      };
  10.      myprint(str,len);
  11.      return 0;
  12. }

  13. int myprint(char *str[],int len){
  14.      int i;
  15.      for(i=0;i<len;i++)
  16.           printf("%s",str[i]);
  17.      return 0;
  18. }

复制代码


this is ok...
对于二维数组来说,数组名是一个常量,一个地址值。该地址就是内存中数组的首地址。
但是你在myprint函数中这个ptr的声明显然是char *类型的,但是你的使用的却是char **类型的,一个指向字符串的指针。(你的本意)
所以你的声明和使用时不一致的。
所以抱错的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP