#include<stdio.h>
void main()
{
char *str="CQUESTIONBANK";
clrscr();
printf(str+9);
getch();
}
輸出是BANK。什麼是printf語句。任何人都可以解釋一下嗎?如何理解printf(str + 9)的聲明?
#include<stdio.h>
void main()
{
char *str="CQUESTIONBANK";
clrscr();
printf(str+9);
getch();
}
輸出是BANK。什麼是printf語句。任何人都可以解釋一下嗎?如何理解printf(str + 9)的聲明?
A 將C中的字符串定義爲由'\0'
終止的char
的序列。一個字符串不是C中的一個類型。所以,處理字符串的函數接受一個指向字符串開頭的指針(一個指向char
的指針)。
你可以對指針進行運算。 + x
表示將指針增加x
指向的元素。因此,在您的示例中,str+9
指向字符B
。該指針作爲字符串的開頭傳遞到printf()
。
str給出指向字符串的指針的基地址。 所以通常如果你只是使用printf(str)
它應該輸出CQUESTIONBANK。 但在這種情況下,您正在打印str + 9,即。 printf(str+9)
,所以在這種情況下它指的是從第9個索引開始的字符串。在這種情況下,第9個索引是B,(C跟隨0索引),所以打印的字符串是BANK。
printf將始終從傳入的指針打印字符串作爲開始位置,直到字符串結尾,它被存儲爲'\0'
,稱爲空字符。如果您嘗試使用printf(str[13])
,則應打印'\0'
str
指向某個位置(地址)。您可以使用+
和-
在這些地址的任何方向移動。所以,如果str
指向某個地址,比如說0x1002
,那麼str+1
指向0x1003
和str-1
指向0x1001
。 (假設str
是char*
與你更大的步伐移動其他指針類型 - sizeof(*str)
)
在你的榜樣 - str
點到持有CQUESTIONBANK
所以,如果你移動鼠標指針9的前進腳步的地址,你搬過去C,Q,U,E,S,T,I,O,N
和你現在指向BANK
。現在,使用printf
將打印從導致BANK
#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();
}
謝謝大家......誰讓我清楚這件事......現在我明白了 – Reeshma
指針artithmetic該位置。將字符串移位9個字節。 –
'str + 9'將指針移至字符串的第9個字符。如果你做'str + 0',那麼完整的字符串_CQUESTIONBANK_被打印出來。如果你使用'str + 1',只會打印_QUESTIONBANK_。 – Gaurav
卸載Turbo C,然後得到一本關於C的書籍。 – Lundin