关于c语言中字符串指针变量的问题
main(){char*ps="thisisabook";intn=10;ps=ps+n;printf("%s\n",ps);}最后输出结果竟然是book这个让我不明白p...
main()
{
char *ps="this is a book";
int n=10;
ps=ps+n ;
printf("%s\n",ps);
}
最后输出结果竟然是book
这个让我不明白
ps(赋值以后依然是指针变量 还是字符串的首地址 ) 可是以字符串的形式输出以后竟然是原来字符串book 应该是地址转换为字符串怎么还是book 这到底是不是地址转换成字符串的表现
如果是 那请高手告诉我是如何转换的
我看了大家的回答
我想是我问得不清楚
我是好奇
字符串指针变量(字符串的首地址) 以字符串形式输出以后为什么会和 字符串指针变量的内容是一样的 展开
{
char *ps="this is a book";
int n=10;
ps=ps+n ;
printf("%s\n",ps);
}
最后输出结果竟然是book
这个让我不明白
ps(赋值以后依然是指针变量 还是字符串的首地址 ) 可是以字符串的形式输出以后竟然是原来字符串book 应该是地址转换为字符串怎么还是book 这到底是不是地址转换成字符串的表现
如果是 那请高手告诉我是如何转换的
我看了大家的回答
我想是我问得不清楚
我是好奇
字符串指针变量(字符串的首地址) 以字符串形式输出以后为什么会和 字符串指针变量的内容是一样的 展开
7个回答
展开全部
ps指向"this is a book"的首地址,即第一个元素,但是指针有一个运算就是 加法运算,
ps + 1 就是 ps的地址 + sizeof(Char) , 后面的sizeof(char)就是偏移地址,C++只所以提供指针的加法运算,这与汇编语言中的offset是一样的。 ps = ps + 10; 就相当于 ps + sizeof(char) * 10,就是加10个字符的地址,它的内容就是字符'b' 没事可以到0x30 百度贴吧 耍耍,这些都是很基础的东西哦。
ps + 1 就是 ps的地址 + sizeof(Char) , 后面的sizeof(char)就是偏移地址,C++只所以提供指针的加法运算,这与汇编语言中的offset是一样的。 ps = ps + 10; 就相当于 ps + sizeof(char) * 10,就是加10个字符的地址,它的内容就是字符'b' 没事可以到0x30 百度贴吧 耍耍,这些都是很基础的东西哦。
展开全部
这里没有类型转换的内容,指针就是存放地址的,
你执行char *ps="this is a book"语句时,系统将字符串第1个地址存放
到ps变量中,后面让这个地址自加10个字节,于是地址是字符串中b的地址.
printf语句的意思就是打印从某个地址开始的字符串,直到字符串结尾.
无论ps指向字符串还是其他的数据类型,printf都会把这个地址开始的数据
当成字符串来打印.
字符串指针变量的意思就是你在ps=ps+n;时加的是n个字符的地址,如果
ps定义成int *型的,假设int占4个字节,ps=ps+n;那么ps中存放的地址就会
加10*4而不是10*1了.
总之,字符型指针不一定就指的是字符,它指向谁不会有强制类型转换的
动作发生.
你执行char *ps="this is a book"语句时,系统将字符串第1个地址存放
到ps变量中,后面让这个地址自加10个字节,于是地址是字符串中b的地址.
printf语句的意思就是打印从某个地址开始的字符串,直到字符串结尾.
无论ps指向字符串还是其他的数据类型,printf都会把这个地址开始的数据
当成字符串来打印.
字符串指针变量的意思就是你在ps=ps+n;时加的是n个字符的地址,如果
ps定义成int *型的,假设int占4个字节,ps=ps+n;那么ps中存放的地址就会
加10*4而不是10*1了.
总之,字符型指针不一定就指的是字符,它指向谁不会有强制类型转换的
动作发生.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼主你好
字符指针ps赋值后是字符串"this is a book"的首地址 也就是说此时ps指向第一个字符't'
*ps就是't'
n=10;
ps=ps+n;
就是使指针ps指向字符串"this is a book"的第11个字符 也就是'b'
那么
printf("%s\n",ps);
就是输出以ps为首的 以'\0'结束的字符串"book"
希望能帮助你哈
字符指针ps赋值后是字符串"this is a book"的首地址 也就是说此时ps指向第一个字符't'
*ps就是't'
n=10;
ps=ps+n;
就是使指针ps指向字符串"this is a book"的第11个字符 也就是'b'
那么
printf("%s\n",ps);
就是输出以ps为首的 以'\0'结束的字符串"book"
希望能帮助你哈
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
字符指针ps赋值后是字符串"this is a book"的首地址 也就是说此时ps指向第一个字符't'
*ps就是't'
n=10;
ps=ps+n;
就是使指针ps指向字符串"this is a book"的第11个字符 也就是'b'
那么
printf("%s\n",ps);
就是输出以ps为首的 以'\0'结束的字符串"book"
ps 是一个指针,指向那个字符串,后来指针+10,所以就指到了后面的字符
*ps就是't'
n=10;
ps=ps+n;
就是使指针ps指向字符串"this is a book"的第11个字符 也就是'b'
那么
printf("%s\n",ps);
就是输出以ps为首的 以'\0'结束的字符串"book"
ps 是一个指针,指向那个字符串,后来指针+10,所以就指到了后面的字符
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个指针型变量的内容并不是"this is a book" 而是"this is a book"的第一个字符的地址付给ps,在print的时候,系统先输出它所指向的第一个字符数据,然后自动使ps加1,直到'\0'结束。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询