首页 新闻 会员 周边

字符数组地址大小

0
[待解决问题]

char* s="I am a student." 请问  指针s+1的地址大于s的地址吗?为什么?

千秋此意的主页 千秋此意 | 初学一级 | 园豆:129
提问于:2016-05-27 15:24
< >
分享
所有回答(3)
-1

这种事,你应该看书把,

代码小兵的成长 | 园豆:303 (菜鸟二级) | 2016-05-27 15:28
0

s+1实际上是s指向的地址加上sizeof(char). 

一介莽夫 | 园豆:202 (菜鸟二级) | 2016-05-27 15:39

程序中写的

char* front = pstr;
char* back = pstr+ n - 1;

while (front < back)

我不太明白,指针可以这样比较吗?越想越混

支持(0) 反对(0) 千秋此意 | 园豆:129 (初学一级) | 2016-05-27 15:50

@剑心犹在: 可以啊,指针实际就是一个整形值。

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2016-05-27 16:16

@Launcher:  刚刚有个人回复我说:不同机器的存储是不一样的,这是从小到大存储时的写法,如在从大到小存储的机器上是要出错的。不知道是不是他说的这样

支持(0) 反对(0) 千秋此意 | 园豆:129 (初学一级) | 2016-05-27 16:20

@剑心犹在: 不是

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2016-05-27 16:34

@Launcher: 那我该怎么理解啊,求大神指教啊

支持(0) 反对(0) 千秋此意 | 园豆:129 (初学一级) | 2016-05-27 16:35

@剑心犹在: 你要理解什么?你见过这样的代码吗?

char* pos = pstr;

char* end = pstr + strlen(pstr);

while(pos < end)

{

  // do something

  pos++;
}

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2016-05-27 16:38

@Launcher: 见过啊   我是想知道是不是char* pstr指向字符串   pstr+1必定大于pstr

支持(0) 反对(0) 千秋此意 | 园豆:129 (初学一级) | 2016-05-27 16:44

@剑心犹在: 我们假设"在从大到小存储的机器上是要出错的"这句话是正确的,那么你见过这样的代码吗?

 

char* pos = pstr;

char* start = pstr - strlen(pstr);

while(pos > start)

{

  // do something

  pos--;

}

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2016-05-27 16:56

@Launcher: 我也觉得那句话有问题,所以不敢相信,要是正确的话,这样的代码也就不会通用,也就没意义了

支持(0) 反对(0) 千秋此意 | 园豆:129 (初学一级) | 2016-05-27 17:01

@剑心犹在: 这就对了嘛!从左到右遍历字符串的算法,从来都是 < , ++。

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2016-05-27 17:48
0
#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;
} 

 

lulipro | 园豆:273 (菜鸟二级) | 2016-05-27 16:50
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册