Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >在字符串上递增指针会导致指向字符的指针不在字符串上

在字符串上递增指针会导致指向字符的指针不在字符串上
EN

Stack Overflow用户
提问于 2021-05-08 09:18:15
回答 1查看 50关注 0票数 0

我有下面的代码来熟悉C:

代码语言:javascript
代码运行次数:0
复制
char txt[] = "Thanksfor4lltheFish";
char *ptr = &txt[2];

printf("%c\n", ++*ptr++);

我希望指针增加2并打印"k“,但得到的结果是"b”,它甚至不在这个字符串中。为什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-08 09:23:12

在此代码片段之后

代码语言:javascript
代码运行次数:0
复制
char txt[] = "Thanksfor4lltheFish";
char *ptr = &txt[2];

指针ptr指向数组文本的第三个字符,即字符'a'

此表达式

代码语言:javascript
代码运行次数:0
复制
++*ptr++

在逻辑上等同于以下语句序列

代码语言:javascript
代码运行次数:0
复制
char *tmp = ptr;
++ptr;
char c = *tmp;
++c;

结果,指针ptr所指向的字符'a'递增,得到字符'b'

带有后增量运算符的表达式的值

代码语言:javascript
代码运行次数:0
复制
ptr++

是指针ptr在递增之前的值。也就是说,你得到了字符'a‘的地址。然后,这个带有字符'a'地址的临时表达式被取消引用

代码语言:javascript
代码运行次数:0
复制
*ptr++

然后,您将获得字符'a'本身,该字符将被递增

代码语言:javascript
代码运行次数:0
复制
++*ptr++

也就是说,第一个后增量运算符被应用于指针ptr。在取消引用由第一个后增量运算符返回的值之后,将第二个前增量运算符应用于指向的字符'a'

如果想要得到预期的结果,可以在printf调用中使用以下表达式

代码语言:javascript
代码运行次数:0
复制
*( ptr += 2 )

在C++中(但不是在C中),您还可以编写

代码语言:javascript
代码运行次数:0
复制
*++++ptr
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67445945

复制
相关文章
技术分享 | 在长字符串上创建索引
当在很长的字符串的字段上创建索引时,索引会变得很大而且低效,一个解决办法是 crc32 或 md5 函数对长字符串进行哈希计算,然后在计算的结果上创建索引。在 MySQL 5.7 以后的版本,可以创建一个自动生成的字段,例如可以创建下面一个表:
爱可生开源社区
2021/07/16
7530
4.7字符串上的动态规划
挑战程序竞赛系列(65):4.7字符串上的动态规划(3) ---- 题意: 基因工程:给定m个子串,求构造长n的母串的方案数。母串中每个字符都至少来自一个子串。 中文的解释有点含糊,不如看原文公式: More formally: denote by |w| the length of w, let symbols of w be numbered from 1 to |w|. Then for each position i in w there exist pair of in
用户1147447
2019/05/26
4880
【C 语言】字符串 一级指针 内存模型 ( 指定大小字符数组 | 未指定大小字符数组 | 指向常量字符串的指针 | 指向堆内存的指针 )
在 栈内存 中 , 声明 不指定大小的 字符数组 , 初始化 “123” 字符串 ;
韩曙亮
2023/03/29
2.4K0
【C 语言】字符串 一级指针 内存模型 ( 指定大小字符数组 | 未指定大小字符数组 | 指向常量字符串的指针 | 指向堆内存的指针 )
指向字符串的指针赋值就出错?
这是因为 test 这个指针指向的是123123123这个储存于常量区的字符串。这个区域的数据是不可改写的,所以运行*test=“321321”;这句话会出错。
用户9736681
2022/05/11
5300
指向字符串的指针赋值就出错?
字符指针 赋值
对于语句 char *a=”hello”; 对于这个声明方式,会造成的误解是:声明了一个字符指针(它会指向一个位置),将“字符串”赋值给 指针表达式”*a”所指向的地址。但正解是:声明了一个字符指针后,并用字符串常量的第一个字符的地址赋值给指针变量a。 即正确顺序是:1.分配内存给字符指针;2.分配内存给字符串;3.将字符串首地址赋值给字符指针; 这里有两点需要考虑清楚的地方:
全栈程序员站长
2022/09/14
5130
字符指针与字符串
C语言把字符串存放在字符数组中,通过数组名可以访问字符串或字符串中的某个字符。实际上,使用字符型指针(简称字符指针)可以更加灵活和方便地使用字符串。
pigeon
2022/04/11
3590
字符指针与字符串
字符指针赋值[通俗易懂]
#include<stdio.h> int main(void) { char *a;
全栈程序员站长
2022/07/31
1.5K0
C语言实例:利用指向指针的指针实现字符串排序
实例代码 // // Created by 冲哥 on 2021/12/20. // #include<stdio.h> #include<string.h> int main() { char *str[]={"CAR","AND","FOR","ERR","DOG","BOX"},**p,*temp; int n=sizeof(str)/sizeof(str[0]),i,j,k;//计算长度 p=str; for(i=0;i<n-1;i++)//按从小到大排序,选择排
C语言中文社区
2022/05/30
7890
C语言实例:利用指向指针的指针实现字符串排序
【C语言】指针进阶:字符指针&&数组指针&&函数指针
✨作者:@平凡的人1 ✨专栏:《C语言从0到1》 ✨一句话:凡是过往,皆为序章 ✨说明: 过去无可挽回, 未来可以改变 ---- 🌹感谢您的点赞与关注,同时欢迎各位有空来访我的🍁平凡舍 ---- 文章目录 @[toc] 🚀前言 🚀字符指针 🚀指针数组 🚀数组指针 🍁&数组名 与 数组名 🍁数组指针的使用 🚀数组传参、指针参数 🍁一维数组传参 🍁二维数组传参 🍁一级指针传参 🍁二级指针传参 🚀函数指针 🚀结语 🚀前言 回想之前,我们学了指针的一些基础👉 指针与结构体 我们知道了指针的概念
平凡的人1
2022/11/15
3K0
【C语言】指针进阶:字符指针&&数组指针&&函数指针
字符排序(函数+指针)
本关任务:对某一个长度为7个字符的字符串, 除首、尾字符之外,要求对中间的5个字符按ASCII码降序排列。
小Bob来啦
2020/12/16
8650
字符排序(函数+指针)
【进阶指针一】字符数组&数组指针&指针数组
目录 1.初阶指针内容回顾 2.字符指针 2-1 字符指针长什么样? 2-2 误区: 2-3  代码一和代码二的异同: 2-4 关于字符常量区: 2-5 一道为了区分栈区和字符常量区&&字符数组和字符指针的面试题:  3.指针数组 3-1 指针数组长什么样捏? 3-2 初级使用(或者说给你看一下基本使用): 3-3这才是指针数组的正确使用方法!【指针数组模拟打印二维数组】  4. 数组指针 4-1 区分取地址数组名和数组名(老生常谈了) 4-2 辨析数组指针和指针数组  4-3 学会了?来看一个小测试
MicroFrank
2023/01/16
9680
指针叠加会不断改变指针指向
下面是错误的代码演示: #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<string.h> void test() { //指针叠加会不断改变指针指向 //指针p一开始指向堆区开辟内存的首地址 char* p = (char*)malloc(sizeof(char)*20); char buf[] = "hello"; int len = strlen(buf); //包含\0 for (
大忽悠爱学习
2021/03/02
4670
指针叠加会不断改变指针指向
C/CPP结构中的字符数组和字符指针
一般情况下我们在结构中都使用字符数组来存储字符串,是否可以使用指向char的指针来代替字符数组呢?
CtrlX
2022/10/04
1.5K0
C++字符数组存放字符串 | 字符指针变量
C++指向数组的指针作函数参数  一维数组名可以作为函数参数传递,多维数组名也 可作函数参数传递。  C++用字符数组存放一个字符串 在C++中可以用多种方法访问一个字符串,第一种字符数组: #include<iostream>//预处理 using namespace std;//命名空间  int main()//主函数  {   char str[]="关注:C语言入门到精通";   cout<<str<<endl;    return 0; //函数返回值为0; } 编译运行结果: 关注:C语言入
小林C语言
2020/12/18
1.3K0
C++字符数组存放字符串 | 字符指针变量
《挑战30天C++入门极限》C/C++中字符指针数组及指向指针的指针的含义
  函数存放在内存的代码区域内,它们同样有地址,我们如何能获得函数的地址呢?   如果我们有一个int test(int a)的函数,那么,它的地址就是函数的名字,这一点如同数组一样,数组的名字就是数组的起始地址。 定义一个指向函数的指针用如下的形式,以上面的test()为例: int (*fp)(int a);//这里就定义了一个指向函数的指针   函数指针不能绝对不能指向不同类型,或者是带不同形参的函数,在定义函数指针的时候我们很容易犯如下的错误。 int *fp(int a);//这里是错误的,因为按照结合性和优先级来看就是先和()结合,然后变成了一个返回整形指针的函数了,而不是函数指针,这一点尤其需要注意!   下面我们来看一个具体的例子: #include <iostream> #include <string> using namespace std; int test(int a); void main(int argc,char* argv[]) { cout<<test<<endl;//显示函数地址 int (*fp)(int a); fp=test;//将函数test的地址赋给函数学指针fp cout<<fp(5)<<"|"<<(*fp)(10)<<endl; //上面的输出fp(5),这是标准c++的写法,(*fp)(10)这是兼容c语言的标准写法,两种同意,但注意区分,避免写的程序产生移植性问题! cin.get(); } int test(int a) { return a; }   typedef定义可以简化函数指针的定义,在定义一个的时候感觉不出来,但定义多了就知道方便了,上面的代码改写成如下的形式: #include <iostream> #include <string> using namespace std; int test(int a); void main(int argc,char* argv[]) { cout<<test<<endl; typedef int (*fp)(int a);//注意,这里不是生命函数指针,而是定义一个函数指针的类型,这个类型是自己定义的,类型名为fp fp fpi;//这里利用自己定义的类型名fp定义了一个fpi的函数指针! fpi=test; cout<<fpi(5)<<"|"<<(*fpi)(10)<<endl; cin.get(); } int test(int a) { return a; }
landv
2019/07/15
1.3K0
C语言 | 用指向指针的指针对5个字符串排序输出
解题思路:读者看着道题的时候,首先要知道什么时指针,指向指针的指针应该怎么用,一般在开发中不这样用,读者要看明白,这个很锻炼思维的。
小林C语言
2021/02/11
1.5K0
C语言 | 用指向指针的指针对5个字符串排序输出
字符数组和字符串指针变量区别
字符串指针变量:无法修改所指向字符串内容 字符数组:将常量区的字符串拷贝一份到栈区,可以对栈区字符串内容进行修改
大忽悠爱学习
2021/03/02
6120
字符数组和字符串指针变量区别
c语言之字符指针变量和字符数组的异同
1.字符数组由若干个元素组成,每个元素中放一个字符,而字符指针变量中存放的是地址(字符串第一个字符的地址),而不是将字符串放到字符指针变量中。
西西嘛呦
2020/08/26
1.5K0
挑战程序竞赛系列(64):4.7字符串上的动态规划(2)
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014688145/article/details/77980283
用户1147447
2019/05/26
4320
C语言字符串指针
运行结果: http://c.biancheng.net http://c.biancheng.net 字符数组归根结底还是一个数组,上节讲到的关于指针和数组的规则同样也适用于字符数组。更改上面的代码,使用指针的方式来输出字符串:
心跳包
2020/08/31
6.1K0

相似问题

字符串上指针的使用

55

字符串上指针的C数组

12

C中字符串上的指针

40

输入字符串上的小指针

12

使字符指针指向空会导致分割错误。

31
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档