2017-06-21 51 views
-1
#include<stdio.h> 

void main() 
{ 
char *str="CQUESTIONBANK"; 
clrscr(); 
printf(str+9); 
getch(); 
} 

輸出是BANK。什麼是printf語句。任何人都可以解釋一下嗎?如何理解printf(str + 9)的聲明?

+1

指針artithmetic該位置。將字符串移位9個字節。 –

+1

'str + 9'​​將指針移至字符串的第9個字符。如果你做'str + 0',那麼完整的字符串_CQUESTIONBANK_被打印出來。如果你使用'str + 1',只會打印_QUESTIONBANK_。 – Gaurav

+0

卸載Turb​​o C,然後得到一本關於C的書籍。 – Lundin

回答

1

A 將C中的字符串定義爲由'\0'終止的char的序列。一個字符串不是C中的一個類型。所以,處理字符串的函數接受一個指向字符串開頭的指針(一個指向char的指針)。

你可以對指針進行運算。 + x表示將指針增加x指向的元素。因此,在您的示例中,str+9指向字符B。該指針作爲字符串的開頭傳遞到printf()

0

str給出指向字符串的指針的基地址。 所以通常如果你只是使用printf(str)它應該輸出CQUESTIONBANK。 但在這種情況下,您正在打印str + 9,即。 printf(str+9),所以在這種情況下它指的是從第9個索引開始的字符串。在這種情況下,第9個索引是B,(C跟隨0索引),所以打印的字符串是BANK。

printf將始終從傳入的指針打印字符串作爲開始位置,直到字符串結尾,它被存儲爲'\0',稱爲空字符。如果您嘗試使用printf(str[13]),則應打印'\0'

0

str指向某個位置(地址)。您可以使用+-在這些地址的任何方向移動。所以,如果str指向某個地址,比如說0x1002,那麼str+1指向0x1003str-1指向0x1001。 (假設strchar*與你更大的步伐移動其他指針類型 - sizeof(*str)

在你的榜樣 - str點到持有CQUESTIONBANK所以,如果你移動鼠標指針9的前進腳步的地址,你搬過去C,Q,U,E,S,T,I,O,N和你現在指向BANK。現在,使用printf將打印從導致BANK

0
#include<stdio.h> 

void main() 
{ 
char *str="CQUESTIONBANK"; 

/* clrscr() function will clear the console.*/ 
clrscr(); 

/* printf() function, outputs the data. The name of the string, in your case 
    it is 'str' always points first element of the string which is 'C'. Adding 9 will 
    'str' point to 'B' character in the string. That's why printf is printing from B on wards. 
    Similarly adding 10 to 'str' will print from 'A' and so on.*/ 

printf(str+9); 

/* getch() function waits for you to enter any character.*/ 
getch(); 
} 
+1

謝謝大家......誰讓我清楚這件事......現在我明白了 – Reeshma