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 及以上的整数,它打印第一个数字,留下第二个数字。

4

2 回答 2

7

不,没有。还有一个很好的理由:不像“schar*序列的结尾”没有明确定义的含义,int并且 anint*不知道int它指向多少个 s。

有了 a char*we have '\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为 lambda。

于 2013-07-11T21:31:58.170 回答