学习C语言遇到的问题

前言

这是博主在班训班培训期间学习C基础过程中遇到的一些问题,我把遇到的问题以及这些问题的解答链接统一放在这篇文章了。这只是博主遇到的一些问题,可能不会适用于全部人,希望大家把这篇文章当做查漏补缺的内容吧。

问题一:把字符串赋给指针和数组具体什么区别?

问题来源

这是博主在培训期间做的题,还有很多题,由于时间原因我先放这一个,有时间我把剩下的题在复制到这里。

问题解答

此问题解答来源于知乎网友的解答:(2 封私信) (c语言)请问把字符串赋给指针和数组具体什么区别? - 知乎 (zhihu.com)

想必你也知道字符串数组的数组名实际上也是指针,指向开辟的这段数组的首地址。但是数组名作为指针是一个常量(指针常量),是不能变的,始终指向这段内存的第一个元素的地址。

而"wuhan"是一个字符串常量,字符串常量是会在静态存储区开辟一段存储空间来存放这些字符,然后将这段存储空间的首地址赋给别人。(除非初始化数组时直接赋值,像这样char * str[6]="wuhan";)

所以,可以将字符串常量"wuhan"赋给字符指针char * p,但不能赋给字符串数组名str(因为数组名是指针常量,不能重新赋值)

想了个比喻:存储空间相当于房子,指针相当于路牌,数组名相当于门牌。路牌和门牌都能指明房子的地址,但是路牌可以修改让它指向不同的房子,而门牌已经和某栋房子绑定了,不能把自家门牌挂别家上面。

情况1:

复制代码
char str[6] = "wuhan";    //建了一栋房子,同时入住了"wuhan"一帮人。

情况2:

复制代码
char str[6];    //建了一栋房子,门牌号为str
str = "wuhan";    //"wuhan"一行人已经住进了宾馆,想把str门牌挂到宾馆上,不行,str只能是上面建的房子的门牌

情况3:

复制代码
char *p = "wuhan";    //"wuhan"一行人住进了宾馆,同时建了个路牌指向他们的宾馆

情况4:

复制代码
char *p;    //建了个路牌,但还没指向具体房子
p = "wuhan";    //"wuhan"一行人住进了宾馆,并且把路牌指向他们的宾馆

C语言学习----字符串数组和字符串指针_字符串指针数组-CSDN博客

初始化数组把静态存储区的字符串拷贝到数组中,而初始化指针只把字符串的地址拷贝给指针

问题二:数组名和指针的区别与联系

C/C++: 数组名与指针之争 - 数组名和指针的区别与联系_哔哩哔哩_bilibili

问题三:指针数组,字符(串)数组,字符(串)指针是什么

来源:区分指针数组,字符指针和字符数组。_判断指针为字符数组-CSDN博客

C语言学习----字符串数组和字符串指针_字符串指针数组-CSDN博客

指针进阶------字符指针、指针数组和数组指针如何辨别和判断_如何判断指针-CSDN博客

指针数组

char* str[] 是一个指针数组,每个元素都是一个指向字符的指针。它可以用来存储字符串数组,每个字符串由一个字符指针指向

复制代码
char* str[] = {"Hello", "World", "Example"}; 

字符数组

字符数组是一个用于存储字符序列的数组

字符指针

字符指针是指向字符的指针。指针数组char* str[]里存的就是字符指针

复制代码
char* ptr = "Hello"; 

字符串字面量(字符串常量)

用双引号括起来的内容称为字符串字面量,字符串常量属于静态存储类别, 储存在静态存储区(static memory)中,也就是存储在内存的常量区,不能进行修改。 因为常量字符串存储在内存的常量区,指针所指向的地址永远是字符串第一个字符的地址。 初始化数组把静态存储区的字符串拷贝到数组中,而**初始化指针只把字符串的地址拷贝给指针。因为数组获得的是原始字符串的副本。总之,如果不修改字符串,不要用指针指向字符串字面量。**而指针是直接指向这个字符串的地址,因此指针的效率较高。

相关推荐
小龙报40 分钟前
《算法通关指南数据结构和算法篇(4)--- 队列和queue》
c语言·开发语言·数据结构·c++·创业创新·学习方法·visual studio
序属秋秋秋4 小时前
《Linux系统编程之开发工具》【实战:倒计时 + 进度条】
linux·运维·服务器·c语言·c++·ubuntu·系统编程
云知谷14 小时前
【C/C++基本功】C/C++江湖风云录:void* 的江湖传说
c语言·开发语言·c++·软件工程·团队开发
wydaicls15 小时前
C语言完成Socket通信
c语言·网络·websocket
im_AMBER15 小时前
Leetcode 46
c语言·c++·笔记·学习·算法·leetcode
时间醉酒17 小时前
数据结构:双向链表-从原理到实战完整指南
c语言·数据结构·算法
奔跑吧邓邓子18 小时前
【C语言实战(75)】C语言内存探秘:泄漏检测与分析实战
linux·c语言·windows·内存·开发实战·泄露检测
Nebula_g18 小时前
C语言应用实例:斐波那契数列与其其他应用
c语言·开发语言·后端·学习·算法
千弥霜19 小时前
codeforces1914 C~F
c语言·算法
white-persist19 小时前
汇编代码详细解释:汇编语言如何转化为对应的C语言,怎么转化为对应的C代码?
java·c语言·前端·网络·汇编·安全·网络安全