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

事实上,我对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 = 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+=1int
的大小,code>会将
a
增加4个字节,或者可能增加8个字节

  • strcpy(str_a,“你好,世界!\n”)
    将包含“Hello,world!\n”的缓冲区复制到
    stru a
    ,该缓冲区是指向20
    char
    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个字节;请记住,指针运算是相对于基类型的大小而不是原始字节完成的。谢谢。我会说得更清楚