2021-10-26

char* 和char[] 申请内存空间的区别

  1. char *s
    申请的变量为全变量,函数调用完成后也不会被销毁,存在内存区域的全局区域中,申请的空间依旧可以进行访问。

定义了一个char型的指针,只知道内存的地址不知道内存单元的大小。

char *s = “hello”;后不能使用 s[0] = 'a’进行赋值。提示内存不能"written".

  1. char s[]
    申请的为局部变量,当函数调用完成后,该块内存被销毁(对应栈内存)

char s[] 定义了指向数组的指针。
char s[] = “hello”;之后仍可以使用 s[0] = ‘a’;进行赋值

  1. char *s 可以和malloc()配合使用
    char *s = (char *)malloc(size);
    相当于
    char s[size];

  2. 实例

#include <stdio.h>

int main(void) { 
    char *p1 = "hello";
    char p2[] = "hello";
    printf("size of p1 is :%d\n",sizeof(p1));
    printf("size of p2 is :%d\n",sizeof(p2));
	return 0;
}

output:
size of p1 is :8
size of p2 is :6

sizeof(p1) ,是因为 p1是一个指针,指针所占的内存为8字节。并非p1指向的“hello”所占的内存。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值