字符指针存放

来源:百度知道 编辑:UC知道 时间:2024/06/27 04:31:48
char *p,*q="Love china";
for (p=q;*p!='\0';p++)
putchar(*p);
puts("");
for (p--;p>=q;p--)
putchar (*p);
}

这个字符串是存放在哪儿,*p只是读取字符串首地址.它是以字符串存放的还是字符形式存放的,谢谢.

"Love china"存放在常量区,而p,q则是在栈中,putchar函数的参数是char型,*p是p指针的解引用,所以传入的是p所指向的字符,p++后指针后移,再次传入的就是下一个字母,所以第一个循环按原顺序打出了Love china,C++中的字符串以‘\0’结束,所以遇到‘\0’就可以终止打印,整个字符串输出完毕。
像puts这种函数的参数是char*,传入指针后会自动打印并是指针后移直至遇到‘\0’,作用和第一个循环是一样的。无所谓是以字符串存放的还是字符形式存放的,p是指针,指向了内存的一个地址而已。

程序运行的时候字符串肯定是存放在内存中的啊。p是指向字符串首地址的指针,它的值就是字符串首地址。因为有char声明,在做p++的时候编译器地址该加多少,这里应该是一个字节,因为字符占一个字节。

p是一个字符指针,所以*p指向一个字符指针指向的内容,即内存地址存放的实际字符值,第一个循环,p被初始化为q,即p的初始化内存地址是字符串"Love china"的起始地址,此时的*p='L',p++后p指向的内存地址每次增加一个字节,所以,*p的内容依次往后读,即下一个为'o',以此类推。
*p存放的的是字符。