C语言指针——字符指针变量(常量字符串和 变量字符串)

本文主要讨论了C语言中常量字符串和变量字符串的区别,包括值的不可变性、存储位置、内存分配方式以及它们在内存地址上的不同。重点指出,尽管内容相同,但两个指向相同字符序列的指针变量在内存中的地址是不同的。

字符指针变量(常量字符串和 变量字符串)

 常量字符串和变量字符串是在编程中常见的两种字符串类型,它们有以下区别:

  1. 值的不可变性:常量字符串的值是不可变的,一旦被定义,就不能修改。而变量字符串的值是可变的,可以随时修改。

 常量字符串1:

const char* constantString = "Hello, World!";

在上述代码中,“Hello, World!” 是一个常量字符串,其值不可修改。

变量字符串1:

char variableString[] = "Hello, World!";

在上述代码中,variableString 是一个变量字符串,其值可以修改。

存储方式:常量字符串通常存储在只读内存区域,而变量字符串通常存储在可读写的内存区域。

常量字符串2:

const char* constantString = "Hello, World!";

在上述代码中,“Hello, World!” 是一个常量字符串,它通常存储在只读内存区域。

变量字符串2:

char variableString[] = "Hello, World!";

在上述代码中,variableString 是一个变量字符串,它通常存储在可读写的内存区域。

内存分配方式:常量字符串通常在编译时就被分配内存空间,而变量字符串通常在运行时动态分配内存空间。

常量字符串3:

const char* constantString = "Hello, World!";

在上述代码中,“Hello, World!” 是一个常量字符串,它在编译时就被分配了内存空间。

变量字符串3:

char variableString[] = "Hello, World!";

在上述代码中,variableString 是一个变量字符串,它在运行时动态分配了内存空间。

————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

常量字符串和 变量字符串地址对比

首先 很显然是不相同的

这里开始做出解释 

不想相同的根本原因是

在str1和str2里面  是开辟两个空间

但是在3 4 里面是指针指向的一个空间 就算后期修改 也是在一个空间进行修改 

这里解释一下 就是 因为字符串的内容是一样的

也就是说

在C语言中,字符串通常是由字符数组实现的,即一串连续的字符。当你有两个字符串指针,它们指向的内容是一样的,这意味着它们都指向了存储相同字符序列的内存地址。然而,这并不意味着两个指针指向的空间是一样的。

在这个例子中,str3和str4指向的内容是一样的,因为它们都指向了同一个字符串字面量"hello"。但是,str1和str2本身是两个不同的指针变量,它们在内存中占据不同的位置。当你打印它们的地址时,你会发现它们是不同的。
指针的值是内存地址,而指针指向的内容是存储在那个地址中的值。即使两个指针指向的内容相同,它们指向的空间(即指针变量的内存地址)也是不同的。这是指针和引用之间的一个重要区别:在C++中,引用是与目标数据同生的别名,所以如果两个引用指向同一个对象,它们引用的实际上是同一个内存位置。但在C语言中,指针只是指向内存地址的变量,它们可以被赋予相同的值,但它们本身是独立的。

这两不是同一个首元素地址

因为开辟的不是一个空间

图解 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值