【问题标题】:Is there a way to print integers at one shot through the int pointer?有没有办法通过 int 指针一次性打印整数?
【发布时间】:2013-07-10 17:59:49
【问题描述】:
#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 及以上的整数,它会打印第一个数字,留下第二个数字。

【问题讨论】:

  • 一枪是什么意思?你的意思是一次性的吗?
  • 没有。没有%everything 格式化代码。
  • 将它们放入字符数组中(将它们转换为字符)。然后打印为字符串。
  • @Angus no C 中没有这样的格式字符串,如果你想重复这个工作我建议你写一个函数(可能是一个宏)
  • @huseyintugrulbuyukisik 不会有相同的结果。具有值12 等的char-array 与打印ints 的数组不同。加上%s 期望数组以 0 结尾,而这个数组不是。

标签: c++ c


【解决方案1】:

不,没有。还有一个很好的理由:与char* 不同,“ints 序列的结束”没有明确的含义,int* 不知道它指向多少个ints。

有了char*,我们就有'\0',如果你忘记了这一点,那么像printf("%s", cptr) 这样的东西就会坏掉。对于int*,我们没有一个很好的等价物,因为人们经常使用0

【讨论】:

    【解决方案2】:

    不在 中。但是由于您的问题也被标记为...

    #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。

    【讨论】:

      猜你喜欢
      • 2021-10-19
      • 2020-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-10
      • 1970-01-01
      • 1970-01-01
      • 2021-11-03
      相关资源
      最近更新 更多