热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

关于“字符指针”和“字符串指针”

小弟最近在看《C语言程序设计》谭书的电子版。在看到指针一章时,发现提到“字符串指针”的概念。想问各位:C语言中“字符串指针”和“字符指针”是否是同一回事?
小弟最近在看《C语言程序设计》谭书的电子版。
在看到指针一章时,发现提到“字符串指针”的概念。
想问各位:C语言中“字符串指针”和“字符指针”是否是同一回事?

21 个解决方案

#1


引用 楼主 shifan3221 的回复:
小弟最近在看《C语言程序设计》谭书的电子版。
在看到指针一章时,发现提到“字符串指针”的概念。
想问各位:C语言中“字符串指针”和“字符指针”是否是同一回事?


趁早你还没入魔,把谭大爷的书丢掉,看谁不好看这个..

#2


我的理解,

char c = 'a'; // 字符
char *pc = &c; // 字符指针
const char *psz = "abc"; // 仍然是字符指针,不过指向一个字符串

const char* szArr[] = {"abc", "123"};
const char **ppsz = szArr; // 如果非要有一个字符串指针,那么我觉得是这个吧。。

#3


建议好好看看我的博文(http://blog.csdn.net/turingo/article/details/8115042)。

#4


引用 1 楼 nadleeh123 的回复:
引用 楼主 shifan3221 的回复:小弟最近在看《C语言程序设计》谭书的电子版。
在看到指针一章时,发现提到“字符串指针”的概念。
想问各位:C语言中“字符串指针”和“字符指针”是否是同一回事?

趁早你还没入魔,把谭大爷的书丢掉,看谁不好看这个..

其他有没有什么好的教材呢,推荐一下?

#5


你要弄明白字符串是怎么存储的
字符指针就是 char *,它代表了一个字符串,从 char * 变量所存储的地址开始,到 '\0'结束
而所谓的字符串指针,是指 char **

#6


引用 4 楼 shifan3221 的回复:
引用 1 楼 nadleeh123 的回复:引用 楼主 shifan3221 的回复:小弟最近在看《C语言程序设计》谭书的电子版。
在看到指针一章时,发现提到“字符串指针”的概念。
想问各位:C语言中“字符串指针”和“字符指针”是否是同一回事?

趁早你还没入魔,把谭大爷的书丢掉,看谁不好看这个..
其他有没有什么好的教材呢,推荐一下?


3楼的朋友的文章你可以好好看下,书我推荐1本<> 有中文版的,这个是C开派祖师爷和另一位大牛写的.

#7


引用 6 楼 nadleeh123 的回复:
引用 4 楼 shifan3221 的回复:引用 1 楼 nadleeh123 的回复:引用 楼主 shifan3221 的回复:小弟最近在看《C语言程序设计》谭书的电子版。
在看到指针一章时,发现提到“字符串指针”的概念。
想问各位:C语言中“字符串指针”和“字符指针”是否是同一回事?

趁早你还没入魔,把谭大爷的书丢掉,看谁不好看这个..
其他有没有什么好的……

有电子版吗?能发我下吗,我邮箱sunship168@163.com

#8


引用 3 楼 turingo 的回复:
建议好好看看我的博文(http://blog.csdn.net/turingo/article/details/8115042)。

高手,把好书共享下呗。我邮箱sunship168@163.com。十分感谢

#9


我买的是纸质的。

引用 8 楼 shifan3221 的回复:
引用 3 楼 turingo 的回复:建议好好看看我的博文(http://blog.csdn.net/turingo/article/details/8115042)。
高手,把好书共享下呗。我邮箱sunship168@163.com。十分感谢

#10


引用 7 楼 shifan3221 的回复:
引用 6 楼 nadleeh123 的回复:引用 4 楼 shifan3221 的回复:引用 1 楼 nadleeh123 的回复:引用 楼主 shifan3221 的回复:小弟最近在看《C语言程序设计》谭书的电子版。
在看到指针一章时,发现提到“字符串指针”的概念。
想问各位:C语言中“字符串指针”和“字符指针”是否是同一回事?

趁早你还没入魔,把谭大爷的书丢……


你可以搜下csdn的资源.

#11


引用 2 楼 kniferlv0 的回复:
我的理解,

char c = 'a'; // 字符
char *pc = &c; // 字符指针
const char *psz = "abc"; // 仍然是字符指针,不过指向一个字符串

const char* szArr[] = {"abc", "123"};
const char **ppsz = szArr; // 如果非要有一个字符串指……

这个只不过是指向指针的指针,为什么说它可以理解成“字符串指针”呢?

#12


VC调试时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
(Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)

想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
指针即地址。“地址又是啥?”“只能从汇编语言和计算机组成原理的角度去解释了。”
但我又不得不承认:
 有那么些人喜欢或者适合用“先具体再抽象”的方法学习和理解复杂事物;
 而另一些人喜欢或者适合用“先抽象再具体”的方法学习和理解复杂事物。
而我本人属前者。

这辈子不看内存地址和内存值;只画链表、指针示意图,画堆栈示意图,画各种示意图,甚至自己没画过而只看过书上的图……能从本质上理解指针、理解函数参数传递吗?本人深表怀疑!
这辈子不种麦不收麦不将麦粒拿去磨面;只吃馒头、吃面条、吃面包、……甚至从没看过别人怎么蒸馒头,压面条,烤面包,……能从本质上理解面粉、理解面食吗?本人深表怀疑!!

提醒:
“学习用汇编语言写程序”

“VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
想要从本质上理解C指针,必须学习C和汇编的对应关系。”
不是一回事!

不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!

有人说一套做一套,你相信他说的还是相信他做的?
其实严格来说这个世界上古往今来所有人都是说一套做一套,不是吗?

不要写连自己也预测不了结果的代码!

电脑内存只是一个一维二进制字节数组及其对应的二进制地址;
人脑才将电脑内存中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、……

#13


C语言里只有字符指针,没有字符串指针
你可以自定义这个名词,把某个东西叫做字符串指针,但不要希望别人能听明白,就这样

#14


引用 12 楼 zhao4zhong1 的回复:
VC调试时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
(Turbo C或Borland C用Turbo De……

汇编感觉好难。

#15


是这样吧:
字符指针,就是指向某个字符的指针
字符串指针,指向一个字符串,字符串以\0结尾。

#16


引用 11 楼 shifan3221 的回复:
这个只不过是指向指针的指针,为什么说它可以理解成“字符串指针”呢? 

原因是,把一个字符指针+1,就可以定位到下一个字符;那么如果有字符串指针,它+1后就应该能定位到下一个字符串啊。而那样写正好就符合了这一点,哈哈!

#17


引用 14 楼 shifan3221 的回复:
引用 12 楼 zhao4zhong1 的回复:VC调试时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
(Tu……
汇编感觉好难。

世上无难事,只要肯登攀。

#18


其实都是一样的,字符串指针是指向字符串的首个字符的地址,也就是单个字符的指针。

#19


引用 16 楼 kniferlv0 的回复:
引用 11 楼 shifan3221 的回复:这个只不过是指向指针的指针,为什么说它可以理解成“字符串指针”呢? 
原因是,把一个字符指针+1,就可以定位到下一个字符;那么如果有字符串指针,它+1后就应该能定位到下一个字符串啊。而那样写正好就符合了这一点,哈哈!

如果这样理解的话 是的。

#20


C语言里面很多书籍常用的说法都不准确,只不过说出来大家都理解就可以了。
字符串一般采用两种表示方式:数组形式和指针形式,理解它们的本质会使用就
可以了。
1、数组形式:
  初始化一个字符串数组可以包括以下四种方式:
  第一种:char s_hi[] = "hello";//一串字符被用双引号引起来,C语言自动为其添加'\0'作为结束符

2、指针形式:
  用指针变量指向字符串:char *hi="hello";
  对于这种方式,系统先在静态存储区分配一块长度为5(hello字符个数)+1(\0)的连续的内存空间存放这个字符串,再把它的首地址赋给指针变量hi。内存中的存储方式如下图所示:

详细解释可以看这里: http://birduu.com/240.html

#21


引用 4 楼 shifan3221 的回复:
引用 1 楼 nadleeh123 的回复:引用 楼主 shifan3221 的回复:小弟最近在看《C语言程序设计》谭书的电子版。
在看到指针一章时,发现提到“字符串指针”的概念。
想问各位:C语言中“字符串指针”和“字符指针”是否是同一回事?

趁早你还没入魔,把谭大爷的书丢掉,看谁不好看这个..
其他有没有什么好的教材呢,推荐一下?
老外的比较靠谱,老谭的还是算了吧。

推荐阅读
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • Ubuntu 9.04中安装谷歌Chromium浏览器及使用体验[图文]
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • IT方面的论坛太多了,有综合,有专业,有行业,在各个论坛里混了几年,体会颇深,以前是论坛哪里人多 ... [详细]
  • 嵌入式处理器的架构与内核发展历程
    本文主要介绍了嵌入式处理器的架构与内核发展历程,包括不同架构的指令集的变化,以及内核的流水线和结构。通过对ARM架构的分析,可以更好地理解嵌入式处理器的架构与内核的关系。 ... [详细]
author-avatar
潇潇雨621715
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有