【问题标题】:constant pointer in C [duplicate]C中的常量指针[重复]
【发布时间】:2012-09-14 16:23:38
【问题描述】:

可能重复:
What is the difference between char s[] and char *s in C?

有一个程序:

#include<stdio.h>

int main()
{
    char str[20] = "Hello";
    char *const p=str;
    *p='M';
    printf("%s\n", str);
    return 0;
}

这会将 Mello 作为答案打印出来。但是由于 p 是一个常量指针,它不应该给出错误吗?

【问题讨论】:

  • 读取常量指针和指向常量的指针的区别

标签: c pointers


【解决方案1】:

确切地说,它是一个常量指针。您无法更改它指向的位置。您可以更改它指向的内容。

const char *p;  // a pointer to const char
char * const p; // a const pointer to char
const char * const p; //combined...

记住语法的最简单方法是根本不记住它。 只需从右到左阅读声明 :-)

【讨论】:

  • 完美答案! :) 说清楚了! :)
【解决方案2】:

char *const p; 是一个指向 char 的常量指针。所以修改p指向的值是完全合法的。

有详细解释:const char vs. char const vs const *char const

【讨论】:

  • @Mat,你说得对,正在删除我的评论(尽管有人同意我的观点:)
【解决方案3】:

您无法更改p 的值,但您可以更改*p 的值。

如果您写了char const *p=str 或const char *p=str,那么您将无法修改*p。

【讨论】:

    【解决方案4】:

    常量指针和指向常量数据的指针是有区别的。考虑这四个:

    const char * p=str;  // p[0] is const
    char const * p=str;  // same
    char *const p=str;   // p is const. *p is not
    char const *const p=str; // p is const, p[0] also
    

    【讨论】:

      猜你喜欢
      • 2023-04-07
      • 2011-08-27
      • 1970-01-01
      • 2014-02-23
      • 1970-01-01
      • 2012-04-22
      • 1970-01-01
      • 1970-01-01
      • 2021-04-19
      相关资源
      最近更新 更多