老林的C语言新课, 想快速入门点此
数组与指针联系密切, 尤其对于字符串, 什么时候用 strcpy(), 什么时候用 " = ", 经常有人弄错, 同时, 经常有人用非 const 修饰的指针指向一个字符字面常量, 这些基本功还是要砸实一些.
C没有自己的字符串类型, 但可以有字符数组兼任, 非常简陋, 但效率极高.
字符数组可以在初始化时使用 " = " , 此时, 程序会将等号右边的字符串拷贝给字符数组
char Arr[16] = "string";
之后则不可以用等号赋值, 只能用strcpy()赋值
Arr = "other string"; // 错误
strcpy(Arr, "other string"); //正确
非 const 字符数组可以更改字符串中的某个字符:
Arr[0] = 'S';
字符数组可以用sizeof()获取数组所占空间大小:
size_t size = sizeof(Arr);
字符数组不可以进行自增自减
Arr++; // 错误
++Arr; // 错误
const字符指针可以指向一个字符串字面常量:
const char *ptr = "string";
但与字符数组的区别是指针不会复制字符串的任何内容, 同时const指针可以获取字符串的字符, 但不能改变它.
char chr = ptr[0]; // 正确
ptr[0] = '1'; //错误
字符指针可以指向一个非 const 数组,
char *otherPtr = Arr;
然后可以改变字符串中的字符,
otherPtr[0] = 'S';
同时, 字符指针可以使用自增自减运算符, 意思是指针指向字符串的下一个字符.
otherPtr++;
字符指针的 sizeof() 运算得到的是指针所占空间, 64位系统一般固定8字节. 这与字符数组截然不同, 但极易混淆.
size = sizeof(otherPtr); // 8
调用数组时, 可以认为除了 sizeof() 运算, 都退化为指向字符串头字符的指针, 但要记住, 和一般指针的不同,
数组不可指向其他指针:
Arr = otherPtr; // 错误
数组不可自增自减, 这个已经说过.
在声明时, 数组与指针严格区别. 相互不可替代
extern char arr[32];
extern char *arrPtr;
char arr[32] = "abc";
char *arrPtr = arr;
数组当作函数形参, 退化为指针, 失去空间信息, 必须用其他形参补充, 绝不可以在函数实现中用sizeof()获取形参数组空间.
int func(char arr[], int len);
以上就是C字符数组与指针区别.
老林的C语言新课, 想快速入门点此