2维数组用printf输出的问题

aizailuoyeshi 2009-09-12 11:01:22
#include<stdio.h>
#include<string.h>
void sort(char str[][50]);
int main()
{
char str[5][50]={"China","Japan","Korea","Egypt","Nepal"};
int i;
//for(i=0;i<5;i++)
// scanf("%s",str[i]);
sort(str);
for(i=0;i<5;i++)
printf("%9s",str[i]);
}
void sort(char str[][50])
{
int i,j;
char temp[6];
for(i=0;i<4;i++)
for(j=0;j<4-i;j++)
if(strcmp(str[j],str[j+1])>0)
{
strcpy(temp,str[j]);
strcpy(str[j],str[j+1]);
strcpy(str[j+1],temp);
}
}
问题处在 printf("%9s",str[i]);这里,str[i]不是地址吗,可是我加上*号却段错误,这是怎么回事阿。
...全文
292 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
hustcalm 2009-09-14
  • 打赏
  • 举报
回复
字符串本来就是地址了饿,如果再加上*就画蛇添足了,编译器会报错的~~·
Damn_boy 2009-09-13
  • 打赏
  • 举报
回复
a[10][10] 等价于 b[10]

a[10] 等价于 b

a 的话就是 二维数组的元素“一维数组”的首地址

&a的话 就是二维数组的地址

有些东西数值上是相同的 但是本质上是不同的
LeeXyan1 2009-09-13
  • 打赏
  • 举报
回复
for(i=0;i <5;i++)
printf("%9s",str[i]);
不如
你把这里
改一下
用puts(str);
我感觉行
lijian22500 2009-09-12
  • 打赏
  • 举报
回复

int *f()
{
int i;
int *data = (int *)malloc(sizeof(int)*100);
for(i=1;i <=100;i++)
{
data[i]=1;
}
return data;
}


void f(int *data)
{
int i;
for(i=1;i <=100;i++)
{
data[i]=1;
}
return data;
}

这两个方法都可以.不过第一个用完后得free掉
lijian22500 2009-09-12
  • 打赏
  • 举报
回复
输出字符串,以字符串首地址做参数就可以.
snoworld2008 2009-09-12
  • 打赏
  • 举报
回复
输出一个字符串,只要给出首地址即可,有系统判断字符串结束符。
肥多罗 2009-09-12
  • 打赏
  • 举报
回复
printf("%9s",str[i]);这里,str[i]不是地址吗,可是我加上*号却段错误,这是怎么回事阿。

%9s字符串呀 你的地址是什么啊 %9d",*str[i]
hoomey 2009-09-12
  • 打赏
  • 举报
回复
那里取地址没问题,是那样输出就有问题了
hoomey 2009-09-12
  • 打赏
  • 举报
回复
楼主为什么要加*号呢?要取一个字符的话直接str[i][j]就可以啊
wxdcxp 2009-09-12
  • 打赏
  • 举报
回复
楼主可能是对二维数组与指针还没有弄明白
在二维数组中不能把&a[i]理解为元素a[i]的地址,不存在元素a[i]。C语言规定,它是一种地址计算方法,表示数组a第i行首地址。在二维数组里a[i],&a[i],*(a+i)和a+i也都是等同的
q664906965 2009-09-12
  • 打赏
  • 举报
回复
for(i=0;i <5;i++)
printf("%9s",str[i]);
}
如果取地址的话....那i就要变成 int *i;
wwfeng0601 2009-09-12
  • 打赏
  • 举报
回复
三楼正解
lijian22500 2009-09-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lijian22500 的回复:]
C/C++ codeint*f()
{int i;int*data= (int*)malloc(sizeof(int)*100);for(i=1;i<=100;i++)
{
data[i]=1;
}return data;
}
C/C++ codevoid f(int*data)
{int i;for(i=1;i<=100;i++)
{
data[i]=1;
}return data;
}
这两个方法都可以.不过第一个用完后得free掉
[/Quote]发错地方了

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧