char* s="I am a student." 请问 指针s+1的地址大于s的地址吗?为什么?
这种事,你应该看书把,
s+1实际上是s指向的地址加上sizeof(char).
程序中写的
char* front = pstr;
char* back = pstr+ n - 1;
while (front < back)
我不太明白,指针可以这样比较吗?越想越混
@剑心犹在: 可以啊,指针实际就是一个整形值。
@Launcher: 刚刚有个人回复我说:不同机器的存储是不一样的,这是从小到大存储时的写法,如在从大到小存储的机器上是要出错的。不知道是不是他说的这样
@剑心犹在: 不是
@Launcher: 那我该怎么理解啊,求大神指教啊
@剑心犹在: 你要理解什么?你见过这样的代码吗?
char* pos = pstr;
char* end = pstr + strlen(pstr);
while(pos < end)
{
// do something
pos++;
}
@Launcher: 见过啊 我是想知道是不是char* pstr指向字符串 pstr+1必定大于pstr
@剑心犹在: 我们假设"在从大到小存储的机器上是要出错的"这句话是正确的,那么你见过这样的代码吗?
char* pos = pstr;
char* start = pstr - strlen(pstr);
while(pos > start)
{
// do something
pos--;
}
@Launcher: 我也觉得那句话有问题,所以不敢相信,要是正确的话,这样的代码也就不会通用,也就没意义了
@剑心犹在: 这就对了嘛!从左到右遍历字符串的算法,从来都是 < , ++。
#include<stdio.h> int main(void) { char *s = "I am a student."; /* s是一个字符指针 "I am a student." 是一个存储在常量区的字符串,整个字符串作为右值时,就是这个字符串在内存中的地址。 又因为C语言中,字符串就是一个特殊的字符数组(特殊在这个数组的最后一个字符一定要是'\0') 所以,整个 "I am a student." 作为右值时,就是字符'I'的指针。 char *s = "I am a student.";意思是:让字符指针s指向字符串 "I am a student." s保存了字符串 "I am a student."的地址,也就是保存了字符串的第一个字符'I'的地址 那么s+1就得到了第二个字符 ' '的地址。 */ printf("s+1 - s=%d\n",(s+1) - s); return 0; }