C 指向数组中的值的指针?

C 指向数组中的值的指针?,c,arrays,pointers,C,Arrays,Pointers,所以我需要一个指向常量字符数组中一个值的指针。但我不能完全让它不出错地工作。这是密码 int main (void) { const char *alp = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; char *ptr = &alp[3]; printf("%s\n", ptr); return 0; } 编辑-抱歉没有提及错误。问题是,根据我在哪里放置不同的星号和符号,我会得到大量不同的错误。没有一个特别的错误。我经常听到的一个

所以我需要一个指向常量字符数组中一个值的指针。但我不能完全让它不出错地工作。这是密码

int main (void)
{
    const char *alp = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

    char *ptr = &alp[3];

    printf("%s\n", ptr);

    return 0;
}
编辑-抱歉没有提及错误。问题是,根据我在哪里放置不同的星号和符号,我会得到大量不同的错误。没有一个特别的错误。我经常听到的一个说 “分配给'char*'的整数到指针转换不兼容” 来自“const char”


最后,我只希望“ptr”等于数组“alp”中指向“D”的指针。

如果只需要打印一个字符,请将
%s
更改为
%c
,然后取消对指针的引用

printf("%c\n", *ptr);

确实您有一个字符指针,但是
%s
告诉printf从该指针打印,直到它读取空字符为止。因此,我们切换到
%c
,它将打印一个字符,但它需要一个值而不是一个指向值的指针。

如果您只需要打印一个字符,请将
%s
更改为
%c
,然后取消对指针的引用

printf("%c\n", *ptr);

确实您有一个字符指针,但是
%s
告诉printf从该指针打印,直到它读取空字符为止。因此,我们切换到
%c
,它将打印一个字符,但它需要一个值而不是一个指向值的指针。

常量表示您不打算更改它,但随后您尝试将引用复制到一个变量,而不受该限制。相反,请尝试:

const char *ptr = &alp[3];

但请注意,正如其他海报所建议的,此代码将为您提供一个指向以D开头的字符串的指针(例如DEFGHI…),而不仅仅是字符D。

常量表示您不打算更改它,但随后您将尝试在没有该限制的情况下复制对变量的引用。相反,请尝试:

const char *ptr = &alp[3];

但请注意,正如其他海报所建议的,此代码将为您提供一个指向以D开头的字符串的指针(例如DEFGHI…),而不仅仅是字符D。

alp
是指向常量
char
的指针

ptr
是指向非常量
char
的指针

如果您想解决这个问题,您需要将
ptr
更改为:

char const * ptr = &alp[3];

alp
是指向常量
char
的指针

ptr
是指向非常量
char
的指针

如果您想解决这个问题,您需要将
ptr
更改为:

char const * ptr = &alp[3];


什么是你没有答对的?问题往往带有问号。你的问题是什么?“我的代码出了什么问题?”这不是一个正确的问题。您看到了哪些错误?你不能编译吗?它们是运行时错误吗?它崩溃了吗?您希望得到什么输出?是否收到错误或警告?您正在尝试将常量字符指针分配给非常量字符指针。我猜编译器正在抱怨这一点。你没有弄对什么?问题通常带有问号。你的问题是什么?“我的代码出了什么问题?”这不是一个正确的问题。您看到了哪些错误?你不能编译吗?它们是运行时错误吗?它崩溃了吗?您希望得到什么输出?是否收到错误或警告?您正在尝试将常量字符指针分配给非常量字符指针。我猜编译器正在抱怨这一点。你对指针的解引用是什么意思,是哪个指针?如果我更改为%c,我会收到一个错误“从'const char*'中分配给'char*'将丢弃限定符”,代码为>>char*ptr;ptr=&alp[3]取消对指针的引用是什么意思,是哪个指针?如果我更改为%c,我会收到一个错误“从'const char*'中分配给'char*'将丢弃限定符”,代码为>>char*ptr;ptr=&alp[3]谢谢,这很有效!我真不敢相信我没想到会把它变成一个常量字符。无论如何,谢谢你!谢谢你,这成功了!我真不敢相信我没想到会把它变成一个常量字符。无论如何,谢谢你!指向
char
的指针和指向字符串的指针(以0结尾的
char
s序列)在C中完全相同。是的,我理解-问题要求指向D的指针,我不确定这是否意味着他们想要特定的字符D,或者从该点开始的字符串。但没有区别。如果您执行
put(ptr)指针将被视为字符串。使用
printf(“%c\n”,*ptr),同一指针将充当指向单个字符的指针。区别在于程序逻辑。指向
char
的指针和指向字符串的指针(以0结尾的
char
s序列)在C中完全相同。是的,我理解-问题要求指向D的指针,我不确定这是否意味着他们想要特定的字符D,或者从那一点开始的字符串。但是没有区别。如果您执行
put(ptr)指针将被视为字符串。使用
printf(“%c\n”,*ptr),同一指针将充当指向单个字符的指针。是程序逻辑造成了不同。