const的语法规则
int main()
{
int n = 20;
const int a = 10; //此时赋予了a常量的属性,即不可以直接修改a的值
a = 20; //err
int *p = &a; //此时不可以直接通过a修改,但可以通过指针形式访问该对象进行修改
*p = 20;
const int* p = &a;//此时const限定*p,不能通过该方式修改*p所指向的对象
*p = 20; //err
p = &n; //但可以修改p里面存放的地址(即可以存放其他变量地址)
int* const p = &a;//此时const限制p存放的地址,不能存放其他变量的地址
p = &n; //err
*p = 20; //但可以修改*p所指向的对象的值
const int* const p = &a;//此时即不可通过*p所指向的对象的方式来修改,又不可以改变p存放的地址
*p = 20; //err
p = &n; //err
printf("%d", *p);
}
eg:
#include <assert.h>
char* my_strcpy(char* destination, const char* source)//加const可以很好的保护要被copy的内容不被修改,防止写bug的好习惯
{
char* ret = destination;
//断言:若为空指针会报错,中止程序执行
assert(destination != NULL);
assert(source != NULL);
while (*destination++ = *source++)
{
;
}
return ret;
}
int main()
{
char arr1[] = "###############";
char arr2[] = "hello word";
printf("%s\n", my_strcpy(arr1, arr2));
return 0;
}