2017-06-21 108 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