C语言学习笔记 const修饰指针变量

在很多函数的参数中,常用const修饰指针变量,比如

void* memcpy(void* dest, const void* src, size_t count)

这里const用来固定传入的指针变量src,因为memcpy函数中不需要改变src指针变量指向的对象,但是需要改变src指向的地址。

对此没有必要总结一下const对于指针变量修饰的不同情况,区别在于const和*的位置关系。

举个例子

int main()
{
    int m = 0;
    int n = 0;
    return 0;
}

当const在*的左侧时,修饰的是指针指向的内容,指针变量指向的对象不能被改变,但是指针变量指向的地址可以被改变。

int main()
{
    int m = 0;
    int n = 0;
    
    const int* p = &m;
    //*p = 10;//错误
    p = &n; //正确
    return 0;
}

当const在*的右侧时,修饰的是指针变量本身,指针变量指向的地址不能被改变,但是指针变量指向的变量可以被改变。

int main()
{
    int m = 0;
    int n = 0;
    
    int* const p = &m;
    *p = 10;//正确
    //p = &n; //错误
    return 0;
}

如果是以下情况,*的左侧和右侧都有const,即

const int* const p = &m;

则指针指向的地址和变量都不能被修改。

*p = 0;//错误
p = &n;//错误

你可能感兴趣的:(C语言学习笔记,c语言)