C中字符串的数组和指针表示法的区别 #包括 内部主(空) { char heart[]=“我爱蒂莉”/*使用数组表示法*/ int i; 首先,对于(i=0;i
应该是C中字符串的数组和指针表示法的区别 #包括 内部主(空) { char heart[]=“我爱蒂莉”/*使用数组表示法*/ int i; 首先,对于(i=0;i,c,arrays,string,pointers,C,Arrays,String,Pointers,应该是 #include<stdio.h> int main(void) { char heart[]="I Love Tillie"; /* using array notation */ int i; for (i=0;i<6;i++) { printf("%c",&heart[i]); /* %c expects the address of the character we want to print */ } return 0
#include<stdio.h>
int main(void)
{
char heart[]="I Love Tillie"; /* using array notation */
int i;
for (i=0;i<6;i++)
{
printf("%c",&heart[i]); /* %c expects the address of the character we want to print */
}
return 0;
或
而不是
printf("%p",&heart[i]); // if you want to print the charachter address in the memory
heart
是一个字符数组,heart[i]
是数组中的字符编号i
&heart[i]
是heart
数组中元素编号i
的内存地址。要打印内存地址,首先必须使用%p
应该是
#include<stdio.h>
int main(void)
{
char heart[]="I Love Tillie"; /* using array notation */
int i;
for (i=0;i<6;i++)
{
printf("%c",&heart[i]); /* %c expects the address of the character we want to print */
}
return 0;
或
而不是
printf("%p",&heart[i]); // if you want to print the charachter address in the memory
heart
是一个字符数组,heart[i]
是数组中的字符编号i
&heart[i]
是heart
数组中元素编号i
的内存地址。要打印内存地址,您必须使用“%p”
,您试图将地址打印为单个字符;这是个坏消息
heart[i]
是一个字符;heart[i]
是该字符的地址。它们根本不是一回事
尝试这样的循环:
printf("%c",&heart[i])
(i=0;i<6;i++)的
{
printf(“%c”,心脏[i]);
printf(“:%s\n”,&heart[i]);
}
看看不同的转换规范(和参数类型)有什么不同。如果愿意,可以在循环的开头添加一个
printf(“%p”,(void*)&heart[i]);
,以查看地址值在循环过程中如何变化。您正试图将地址打印为单个字符;这是个坏消息
heart[i]
是一个字符;heart[i]
是该字符的地址。它们根本不是一回事
尝试这样的循环:
printf("%c",&heart[i])
(i=0;i<6;i++)的
{
printf(“%c”,心脏[i]);
printf(“:%s\n”,&heart[i]);
}
看看不同的转换规范(和参数类型)有什么不同。如果您愿意,您可以在循环的开头添加一个
printf(“%p”,(void*)和heart[i]);
来查看地址值在循环中的变化。您在哪里读到的heart[i]
与和heart[i]相同
?它们的意思不一样。字符数组的名称与任何数组名称一样,产生数组第一个元素的地址。因此,以下内容适用于数组m1:m1=&m1[0]、*m1='L',和*(m1+1)==m1[1]=='i'来自C Primer Plus-STephen Prata,这也让我感到困惑。是什么让你认为char
与char的地址(char*
)是一样的?是不是?你误读了等价物。显然,数组是char m1[]=“Like”
或类似的东西。说m1=&m1[0]
是准确的。说*m1=='L'
相当于说m1[0]='L'
,给定我显示的初始化是准确的。同样地,*(m1+1)=='I'
和m1[1]='I'
是单独准确的,但复合语句*(m1+1)==m1[1]=='i'
在C中的计算结果不是真的,尽管松散地说是有意义的。你在哪里读到的心[i]
与心[i]是一样的
?它们的意思不一样。字符数组的名称与任何数组名称一样,产生数组第一个元素的地址。因此,以下内容适用于数组m1:m1=&m1[0]、*m1='L',和*(m1+1)==m1[1]=='i'来自C Primer Plus-STephen Prata,这也让我感到困惑。是什么让你认为char
与char的地址(char*
)是一样的?是不是?你误读了等价物。显然,数组是char m1[]=“Like”
或类似的东西。说m1=&m1[0]
是准确的。说*m1=='L'
相当于说m1[0]='L'
,给定我显示的初始化是准确的。同样地,*(m1+1)=='I'
和m1[1]='I'
是单独准确的,但复合语句*(m1+1)==m1[1]=='i'
在C中的计算结果不是真的,尽管从广义上讲它是有意义的。是的,%p
会起作用;当然,它会做一个完全不同的工作。%p
将打印地址;%s
将打印子字符串。在这两个字符串中,子字符串对OP来说可能更有趣,但您可以添加一个printf(“%p\n”,(void*)和heart[i]);
到信息打印操作列表。@MarounMaroun:%p
也需要(void*)
castYes,%p
会起作用;当然,它会做一个完全不同的工作。%p
将打印地址;%s
将打印子字符串。在这两个字符串中,子字符串可能对OP更感兴趣,但您可以添加一个printf(“%p\n”,(void*)&heart[i]);
到信息打印操作列表。@marounnaroun:%p
还需要(void*)
强制转换