第1个回答 2010-08-21
楼上给的3个程序都能实现楼主的要求。
但是经过观赏楼上3个程序,包括楼主的程序,感觉很困惑,这么简单一个程序,怎么就搞的那么复杂呢?问题在除了标题以外的任何地方都没有提到指针吧,这本来就是用个二维数组就能很好解决的问题。为什么非要加入指针呢。
指针是一个很容易出错的地方,要不然JAVA中为啥要去掉指针呢?另外i和j一般都是当做计数器的功能来使用,你将i定义为指针,不但自己不小心会搞混出错,别人看你的程序也很费解。最后一点连续使用getchar ();你的意思是想让程序每输出一个数字就停顿下,然后响应键盘再继续输出,如果这样的话,一个getchar ();就应该放在输出的那个{}里面。
程序的实现应该是简单易读的,别人很容易就能看出自己的逻辑,即使使用很复杂的逻辑,也应该给予注释。
不管你是编程高手,还是新入门的菜鸟,在不能提高程序效率的前提下,都尽量不要把程序写的看起来很复杂。写的程序不仅要方便自己调试,还要尽可能方便他人阅读和修改。
啰嗦几句,觉得有道理可以采纳,觉得我在无理取闹大可无视!
第2个回答 2010-09-03
这两个不可以同时出现在一个二维数组里
存放已知的字符串可以利用锯齿状数组,未知的那就动态分配内存,或是开大点。
指向字符串指针就开个二级指针数组。
例如这个样子。。。
char **ppStr[2][2] = {NULL };
int i = 0;
可以
for(; i sizeof(ppStr); ++i)
{/*然后用malloc动态分配*/ }本回答被提问者采纳
第3个回答 2010-08-20
把程序删了吧,换个思路重写。
你用指针作为for的循环条件很有创意,但不实用。
i=a[0];我想是你想取数组的首地址。可以用以下方式。
i=&a[0];或i=a;
&a[0]为数组元素的首地址,后者a代表数据元素的首地址。
第4个回答 2010-08-20
你的i++ 只是从a[0][1]移动到a[0][2]哦 应该是加4
还有你的输入函数 应该是scanf("%d",i+j);
#include<stdio.h>
int main()
{
int a[3][4],*i,j;
for(i=a[0];i<*(a+3);i= i+ 4)
{
for(j=0;j<4;j++)
{
scanf("%d",i+j);
}
}
for(i=a[0];i<a[3];i= i + 4 )
{
printf("%d ",*(i+3));
}
getchar ();
getchar ();
return 0;
}
第5个回答 2010-08-20
不需要指针,下面的代码就能实现!
#include<stdio.h>
int main()
{
int a[3][4],i,j;
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
scanf("%d",&a[i][j]);
}
}
for(i=0;i<3;i++)
{
printf("a[%d][4] = %d\n",(i+1),a[i][3]);
}
getchar ();
getchar ();
return 0;
}