2013-07-10 59 views
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指向的整数?有没有办法通过int指针一次打印整数?

EDITED:

#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.为什么使用差值打印? 。如果我用值9替换,它会正确显示。对于10位及以上的整数,其打印第一位数字后面的第二位数字。

+0

你是什么意思一枪?你的意思是一下子吗? – fvrghl

+2

没有。没有'%everything'格式的代码。 –

+0

把它们放在字符数组中(将它们转换为字符)。然后打印为字符串。 –

回答

7

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

随着char*我们有'\0',如果你忘记这一点,那么像printf("%s", cptr)东西将打破。与int*我们没有一个很好的等效,因为人们使用0相当多。

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

相关问题