C 这一产出是如何产生的?
事实上,我对C语言的指针还不熟悉,所以觉得有点难理解。任何关于指针的帮助都将不胜感激。谢谢。第一个:C 这一产出是如何产生的?,c,pointers,pointer-arithmetic,C,Pointers,Pointer Arithmetic,事实上,我对C语言的指针还不熟悉,所以觉得有点难理解。任何关于指针的帮助都将不胜感激。谢谢。第一个: Hello, world! llo, world! Hey you guys! 指针指向“Hello,wold!\n”(str_a),以便打印内容 第二点: pointer = str_a; printf(pointer); pointer2指向pointer后面的2个字符,这是“Hello,wold!\n”的第三个字符,因此打印lloworld 第三: pointer2 = poin
Hello, world!
llo, world!
Hey you guys!
指针
指向“Hello,wold!\n”(str_a),以便打印内容
第二点:
pointer = str_a;
printf(pointer);
pointer2
指向pointer
后面的2个字符,这是“Hello,wold!\n”的第三个字符,因此打印lloworld
第三:
pointer2 = pointer + 2;
printf(pointer2);
现在,将“y you guys”复制到指针2
中的地址,该地址仍然是指针的两个字符,因此字符串的前两个字符仍然相同
strcpy(pointer2, "y you guys!\n");
printf(pointer);
strcpy(指针2,“你们这些家伙!\n”)代码>从指针2
重写,例如,第一个'l'第一个strcpy
将引用的字符串常量复制到stru a
缓冲区中。然后通过指向缓冲区开始的指针打印缓冲区pointer2
设置为将两个字符指向比pointer
更深的缓冲区(两个字符都是指向字符的指针),然后打印上第三个字符的缓冲区内容
第二个strcpy
将带引号的字符串复制到缓冲区中,从第三个字符开始,覆盖前面的内容。请注意,前两个字符没有被覆盖,因此当写入缓冲区的全部内容时,它们会显示出来。指针是数字(32位系统上通常为4字节,64位系统上为8字节),表示逻辑内存中的地址。例如,如果有4GB内存可用,指针将包含从0到4294967295的值。在C中,可以有指向不同类型事物的指针。指针的类型不会影响它存储的地址,但会影响它的递增方式<代码>整数*a;a+=1根据系统上int
的大小,code>会将a
增加4个字节,或者可能增加8个字节
strcpy(str_a,“你好,世界!\n”)
将包含“Hello,world!\n”的缓冲区复制到stru a
,该缓冲区是指向20char
s的指针。C中的数组只是指针,它从数组的地址开始预先分配了一些内存
pointer=str\u a
使指针
指向与stru a
相同的地址
pointer2=指针+2代码>使指针2
指向与指针相同的字符串中的两个字符
strcpy(指针2,“你们这些家伙!\n”)
将存储在stru_a
和pointer
中的原始字符串的前两个字符以外的所有字符替换为新文本,因为pointer2
现在指向的是新文本
首先,使用printf
打印字符串而不使用%s
说明符是不好的做法。
现在谈谈这个问题
声明
memory: H e l l o , w o r l d \ n
^ ^
pointer-+ |
pointer2------+
将字符串“你好,世界!”
复制到stru\a
strcpy(str_a, "Hello, world!\n");
pointer = str_a;
printf(pointer);
将该字符串分配给指针
指针
指向字符串的第一个字符
,即H
strcpy(str_a, "Hello, world!\n");
pointer = str_a;
printf(pointer);
将打印字符串“你好,世界!”
strcpy(str_a, "Hello, world!\n");
pointer = str_a;
printf(pointer);
将向指针添加2个单位,现在指针2
将指向字符串“Hello,world!”
的第三个字符,即l
(fist)。现在指针
和指针2
指向同一字符串“你好,世界!”
,但起始地址不同。现在
pointer2 = pointer + 2;
将“y你们!\n”
复制到指针2
,字符串“llo,world!”
将变成“y你们!”
。由于指向指针对象的指针所做的任何更改都会反映到其指向的所有指针,因此,现在原始字符串“Hello,world!”
将变成“Hey you guys!”
和语句
strcpy(pointer2, "y you guys!\n");
将打印嘿你们代码> 到目前为止,你取得了什么成果?这很简单。不,指针不是整数。@H2CO3。是的,它们不是整数,但它们是整数。我已经编辑了这篇文章。+1,带有一个nit:指针2
指向指针之后的字符类型的2个元素,而不是2个字节;请记住,指针运算是相对于基类型的大小而不是原始字节完成的。谢谢。我会说得更清楚