2013-07-10 41 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

相關問題