字面量
const char *p = "string"; // 一定要用const
此段代码将char指针指向字面量string。
string是只读不可写,所以需要const。
如果此时试图修改*p[0] or *p[1]… 是错误的。
因为string已经开辟了一个内存空间,指针指向的是string“常量”。
数组
char ar[] = "sentence";
char *p = at;
此段代码将指针p指向一个数组,实际意义是:
内存中本就有一个空间存放的是sentence常量,现如今开辟了一块新的内存(数组),
相当于是将sentence给复制到数组at中,从而修改*p只是修改数组,而不是修改“常量”。
char *a 与 char a[]的区别(转)
char* a是一个指针,根本没分配内存,他指向的”string” 是只读的,不能改变,你在下面给他赋值肯定是错的。而char a[]是一个数组,已经分配内存,是将”string” 复制到该内存里面,这个内存是可读写的 。
指针是不分配内存的,它指向的是系统的只读的内存,而数组是分配内存的,就是将系统的只读的内存里面的值复制到它的内存里面,因此可读写
。
char* p是定义的一个指针,他指向的字符串”string” 是存在不可修改的区域(代码区)的。
而char p[]是一个数组。他的内容存在栈区可以修改。
正确的操作应该是:
char * a = (char * )malloc(10);
strcpy(a, “string”);