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)代码>,同一指针将充当指向单个字符的指针。是程序逻辑造成了不同。