有没有办法通过int指针一次打印整数?

时间:2013-07-10 17:59:50

标签: c++ c

#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 个答案:

答案 0 :(得分:7)

不,没有。也有一个很好的理由:与char*不同,“int s序列的结尾”没有明确定义,而int*不知道有多少int 1}}它指向。

char*我们有'\0',如果您忘记了这一点,那么printf("%s", cptr)之类的内容就会中断。使用int*我们没有很好的等价物,因为人们使用0非常多。

答案 1 :(得分: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中,如果需要,可以用lambda替换my_print