利用指位器阵列从萤幕输出以下阵列的内容~

Home Home
引用 | 编辑 karen7710
2007-06-16 17:18
楼主
推文 x0
题目:
利用指位器阵列从萤幕输出以下阵列 ..

访客只能看到部份内容,免费 加入会员



献花 x0
引用 | 编辑 GNUGCC
2007-06-17 02:43
1楼
  
请问这个是要用指标来做运算吗???

献花 x0
引用 | 编辑 karen7710
2007-06-17 13:27
2楼
  
嗯嗯,因为这章在讲指位器~

献花 x0
引用 | 编辑 GNUGCC
2007-06-17 13:55
3楼
  
指标在处理阵列时要非常的小心, 在复杂度上也有一些挑战性...
下面是一个范例 :

for ( int i = 0; i < 3; i++ )
{
  for ( int j = 0; j < 5; j++ )
    cout << *(*(array + i) + j);

  cout << endl;
}

献花 x0
引用 | 编辑 karen7710
2007-06-17 21:22
4楼
  
以下是在网路上找到的程式,要如何改成.c档可以用的程式?
复制程式
#include <cstdlib>

#include <iostream>

using namespace std;



int main(int argc, char *argv[])

{

int array[3][5]={{2,3,4,5,6},{7,8,9,10,11},{12,13,14,15}};

int *ptr=array[0]; 



for(int i=0;i<3;i++) 

for(int j=0;j<5;j++)

cout<<"array["<<i<<"]["<<j<<"]= "<<*(ptr+i*5+j)<<endl; 

system("PAUSE");

return EXIT_SUCCESS;

} 


献花 x0
引用 | 编辑 gamewalk
2007-06-17 22:58
5楼
  
.c档的话...不要用using namspace 还有include都要改掉 若要列印的话改成用printf , 还有把for里面的int i , int j 放在外面宣告试试....

献花 x0
引用 | 编辑 karen7710
2007-06-18 08:37
6楼
  
以下的程式都无法跑东西出来!
复制程式
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
    int array[3][5]={{2,3,4,5,6},{7,8,9,10,11},{12,13,14,15}};
    int *ptr=array[0];
    int i,j; 
    for(i=0;i<3;i++) 
     for(j=0;j<5;j++)
       printf("%s",array[i][j]);
    
    system("pause");
    return 0;
    }  


献花 x0
引用 | 编辑 gamewalk
2007-06-18 08:55
7楼
  
你要列印的应该是数字吧...为什么你用%s , 还有既然是说了要用指位器array[ i ][ j ] 这边应该改成GNUGCC大大的方法 *(*(array + i) + j) 或者你自己找的 *(ptr+i*5+j) 这样比较符合题目吧....

献花 x0
引用 | 编辑 karen7710
2007-06-18 10:34
8楼
  
可以执行出来了,可是最后会多印一个0,要怎么解决呢?
复制程式
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
    int array[3][5]={{2,3,4,5,6},{7,8,9,10,11},{12,13,14,15}};
    int *ptr=array[0];
    int i,j; 
    for(i=0;i<3;i++) 
     for(j=0;j<5;j++)
       printf(" %d", *(*(array + i) + j));
    
    system("pause");
    return 0;
    } 


献花 x0
引用 | 编辑 GNUGCC
2007-06-18 13:20
9楼
  
int array[3][5]={{2,3,4,5,6},{7,8,9,10,11},{12,13,14,15}};

在第 3 个只有放 4 个变数所以最后一个会被设为 0...
你只要在那里加一个数字就可以了...^^

献花 x0
引用 | 编辑 karen7710
2007-06-18 16:00
10楼
  
可是多加一个数字,会不会不符题目要求?

献花 x0
引用 | 编辑 karen7710
2007-06-18 16:03
11楼
  
我多用一个数字,最后在用\b把它删掉,这样可以吧?
复制程式
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
    int array[3][5]={{2,3,4,5,6},{7,8,9,10,11},{12,13,14,15,1}};
    int *ptr=array[0];
    int i,j; 
    for(i=0;i<3;i++) 
     for(j=0;j<5;j++)
       printf(" %d", *(*(array + i) + j));
    printf("\b");
    system("pause");
    return 0;
    }  


献花 x0
引用 | 编辑 GNUGCC
2007-06-18 16:16
12楼
  
即然题目这样的话那就用另外一种方法...
你可以判断是否 > 0 再做输出 :

if ( *(*(array + i) + j ) > 0 )
  cout << *(*(array + i) + j);

不过照常理来看的话宣告一个二维阵列通常里面会放入刚好的数值在里面...
假如不够的话系统会自动设为 0 所以会印出 0...

献花 x1
引用 | 编辑 gamewalk
2007-06-18 18:50
13楼
  
那看要不要这样...把二维阵列看成是一维的 , 因为这里记忆体是连续的 , 我看你还保留着 ptr
所以列印的时候可以改成这样...

while( *ptr != 0 ) //当值是0的时候跳出
  printf(" %d" , *ptr++ ); //这里 *ptr++ 要分解看成 *ptr ( 内容值 ) 以及 ptr++ (位置加一)

但是记住要把你现在阵列里面最后一个值 1 删掉 , 不然不知道会印到什么时候...

献花 x1
引用 | 编辑 karen7710
2007-06-19 07:35
14楼
  
嗯嗯,我了解了,谢谢你们啰^^ 表情

献花 x0