#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