1
#include<stdio.h>
int main(){
 int integers[40] = {1,2,3,4,5,6,7,8,9,10,-1};
 int integers1[40];
 int *ptr;
 int *ptr1;

 ptr = integers;
 ptr1 = integers1;


 while(*ptr != -1){
  *ptr1++ = *ptr++;
 }
 *ptr1 = -1;

 ptr1 = integers1;
 while(*ptr1 != -1){
  printf("\n *ptr1 : %d \n",*ptr1);
  *ptr1++;
 }
 return 0;
}

ループを使用せずに、ptr1 が指す整数を一度に出力する方法はありますか?

編集:

#include<stdio.h>
int main(){
 char integers[40] = {'1','2','3','4','5','6','7','8','9','10','\0'};
 char integers1[40];
 char *ptr;
 char *ptr1;

 ptr = integers;
 ptr1 = integers1;


 while(*ptr != '\0'){
  *ptr1++ = *ptr++;
 }
 *ptr1 = -1;

 ptr1 = integers1;
 ptr = integers;

 printf("\n *ptr1 : %s  \n",ptr1);
 printf("\n ptr : %s \n",ptr);

 return 0;
}

最後の整数 10 が表示されません。代わりに、0 として出力されます。diff 値で出力されるのはなぜですか? . 値 9 に置き換えると、正しく表示されます。10 以上の整数の場合、1 桁目が出力され、2 桁目が残ります。

4

2 に答える 2

7

いいえ、ありません。もっともな理由もあります。char*「一連のints の末尾」には明確に定義された意味がなく、それが指してint*いる s の数がわからないのとは異なります。int

があるのですchar*'\0'、これを忘れると みたいなものprintf("%s", cptr)が壊れてしまいます。はかなり頻繁に使用されるため、これにint*相当するものはありません。0

于 2013-07-10T18:04:45.677 に答える
1

ではありません。しかし、あなたの質問にはのタグも付けられているため...

#include <cstdio>
#include <algorithm>

#define SIZE 40

void my_print(int i) { std::printf("%d\n", i); }

int main()
{
  int integers[SIZE] = {1,2,3,4,5,6,7,8,9,10,-1};
  int* end = std::find(integers, integers + SIZE, -1);
  std::for_each(integers, end, my_print);
}

C++11 ではmy_print、必要に応じてラムダに置き換えることができます。

于 2013-07-11T21:31:58.170 に答える