我正在复习 C,并且有一个关于
const
指针用法的问题。 我理解以下代码:
const char *someArray
这是定义一个指向 char 类型的指针,而
const
修饰符意味着 someArray
中存储的值无法更改。 然而,下面这句话是什么意思呢?
char * const array
这是指定参数的另一种方法,该参数是指向名为“array”的数组的 char 指针,该数组是
const
并且无法修改?
最后,这个组合意味着什么:
const char * const s2
作为参考,这些内容取自 Deitel C 编程书籍第 7 章,所有这些都用作传递给函数的参数。
const char*
是一个指向字符的指针,您无法更改字符的值(至少不能通过指针(不放弃常量))。
char* const
是一个指向字符的指针,可以在其中更改字符,但不能使指针指向不同的字符。
const char* const
是指向常量 char 的常量指针,即您既不能更改指针指向的位置,也不能更改被指向者的值。
来自 const int*、const int * const、int const *有什么区别:
倒着读...
int* - pointer to int int const * - pointer to const int int * const - const pointer to int int const * const - const pointer to const int
简而言之,区别在于:
// pointer to a const
void f1()
{
int i = 100;
const int* pi = &i;
// *pi = 200; <- won't compile
pi++;
}
// const pointer
void f2()
{
int i = 100;
int* const pi = &i;
*pi = 200;
// pi++; <- won't compile
}
// const pointer to a const
void f3()
{
int i = 100;
const int* const pi = &i;
// *pi = 200; <- won't compile
// pi++; <- won't compile
}
cdecl
:~ $ cdecl 输入“帮助”或“?”寻求帮助 cdecl> 解释
const char *someArray 将 someArray 声明为指向 const char 的指针 cdecl> 解释 char * const someArray 将 someArray 声明为指向 char 的 const 指针 cdecl> 解释 const char * const s2 将 s2 声明为指向 const char 的 const 指针 cdecl>
char * const array;
这意味着指针是恒定的。另外,
const * const char array;
表示指向常量内存的常量指针。
采用这两个定义:
void f1(char *ptr) {
/* f1 can change the contents of the array named ptr;
* and it can change what ptr points to */
}
void f2(char * const ptr) {
/* f2 can change the contents of the array named ptr;
* but it cannot change what ptr points to */
}
使指针本身
const
,就像在 f2 示例中一样,绝对
/* ... calling code ... */
f1(buf);
f2(buf);
无论哪种情况,
buf
在函数调用后都保持不变。
char *strcpy(char *dest, const char *src);
一种可能的实现是
char *strcpy(char *dest, const char *src) {
char *bk = dest;
while (*src != '\0') {
*dest++ = *src++;
}
*dest = *src;
return bk;
}
此实现仅更改函数内部的
dest
和
src
。使用任一指针(或两者)
const
不会为 strcpy() 函数或调用代码带来任何好处。