C语言传递指向常量的指针

传递指向常量的指针是C中常用的技术,效率很高,因为我们只传了数据的地址,能避免某些情况下复制大量内存。不过,如果只是传递指针,数据就能被修改。如果不希望数据被修改,就要传递指向常量的指针。

在本例中,我们传递一个指向整数常量的指针和一个指向整数的指针。在函数内,我们不能修改通过指向常量的指针传进来的值:

void passingAddressOfConstants(const int* num1, int* num2) {
    *num2 = *num1;
}

int main() {
    const int limit = 100;
    int result = 5;
    passingAddressOfConstants(&limit, &result);
    return 0;
}

这样不会产生语法错误,函数会把100赋给result变量。在下面这个版本的函数中,我们试图修改两个被引用的整数:

void passingAddressOfConstants(const int* num1, int* num2) {
    *num1 = 100;
    *num2 = 200;
}

如果我们把limit常量传递给函数的两个参数就会导致问题:

const int limit = 100;
passingAddressOfConstants(&limit, &limit);

这样会产生一个语法错误,抱怨第二个形参和实参的类型不匹配。此外,它还会抱怨我们试图修改第一个参数所引用的常量。

该函数期待一个整数指针,但是传进来的却是指向整数常量的指针。我们不能把一个整数常量的地址传递给一个指向整数的指针,因为这样会允许修改常量。1.4.2节有详细讨论。

像下面这样试图传递一个整数字面量的地址也会产生语法错误:

passingAddressOfConstants(&23, &23);

这种情况错误信息会指出取地址操作符的操作数需要的是一个左值。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程