char*初始化、声明分配空间、C/C++中内存分配问题

一、 关于char* 初始化赋值问题

  • “const char*” 类型的值不能用于初始化"char *" 类型的实体
char* p = "openstack";
*p = 32// 欲将‘o’换成0
// 错误,想让p指向字符串“openstack”,实际上可以写成:
// char *p;
// p = “openstack”;
// 当然错误,p是地址,“openstack”是字符串

有问题:编译器会报错
因为“openstack”作为字符常量不能分配给指针变量p,正确应该为:

char p[] = "openstack";   // p是一个字符数组
*p = 32;

// 或者
char* p = (char*)malloc(100 * sizeof(char));  //预先申请动态空间
strncpy(p, "openstack", 100);
*p = 32;

字符指针同样需要注意:

// 错误, p没有实际的指向'A'
char* p = 'A';
// 正确:
char* p;
char a = 'A';
p = &a;

  • *p = 32,p内容变为空
#include<iostream>
#include<string>
using namespace std;
int main()
{
 char p[] = "zzw";
 cout << p;
 *p = 32;
 cout << p;
 cout << "*";
 cout << '\n';
 system("pause");
 return 0;
}
// 1. 
// char p[] = "zzw";  可以
// char* p = "zzw";  不可以,"const char*" 类型的值不能用于初始化"char *" 类型的实体
// 2.
// char p[] = "zzw";
// *p = 32;    打印的是: " zw"
// *p = 0;     打印的是: (空)

二、 声明指针char* p; 的时候是否分配了空间

char a;     // 为a分配了空间
a = 'A';     // 正确
char* p;   // 为p随机分配了空间
p = &a;   // 正确
*p = 'A';  // 错误

char *p; 声明p为指向字符的指针,这时为这个指针分配了存储空间。但这时其中是随机数,我们称它为指向一个不确定的内存地址。
如果“直接 *p = ‘A’,那么就会在一个无法预知的内存地址写入一个字符‘A’。这是不允许的,可能导致程序崩溃。
p=&a; 则是把已有的变量a的地址写入指针p,我们称使指针指向a. 可以通过p对变量a正常操作。

三、C语言变量声明内存分配

参考:https://www.cnblogs.com/yasmi/articles/4933842.html

参考:
https://www.cnblogs.com/yasmi/articles/4933842.html
https://zhidao.baidu.com/question/460974697.html

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值