char* 和char[] 申请内存空间的区别
- char *s
申请的变量为全变量,函数调用完成后也不会被销毁,存在内存区域的全局区域中,申请的空间依旧可以进行访问。
定义了一个char型的指针,只知道内存的地址不知道内存单元的大小。
char *s = “hello”;后不能使用 s[0] = 'a’进行赋值。提示内存不能"written".
- char s[]
申请的为局部变量,当函数调用完成后,该块内存被销毁(对应栈内存)
char s[] 定义了指向数组的指针。
char s[] = “hello”;之后仍可以使用 s[0] = ‘a’;进行赋值
-
char *s 可以和malloc()配合使用
char *s = (char *)malloc(size);
相当于
char s[size]; -
实例
#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”所占的内存。