C 增量前/增量后的指针

C 增量前/增量后的指针,c,pointers,C,Pointers,有人能完整地解释一下下面的代码吗 #include<stdio.h> #include<stdlib.h> int main() { int *a, *s, i; a = s = (int *) malloc(4 * sizeof(int)); for (i = 0; i < 4; i++) { *(a + i) = i * 10; printf(" %d ", *(a + i)); }

有人能完整地解释一下下面的代码吗

#include<stdio.h>
#include<stdlib.h>

int main()
{
    int *a, *s, i;

    a = s = (int *) malloc(4 * sizeof(int));

    for (i = 0; i < 4; i++)
    {
        *(a + i) = i * 10;
        printf(" %d ", *(a + i));
    }

    printf("\n");
    printf("%d\n", *s++);
    printf("%d\n", (*s)++);
    printf("%d\n", *s);
    printf("%d\n", *++s);
    printf("%d\n", ++*s);
    printf("\n");
    printf("%d\n", *a++);
    printf("%d\n", (*a)++);
    printf("%d\n", *a);
    printf("%d\n", *++a);
    printf("%d\n", ++*a);

    return 0;
}
1) 指针“s”如何打印值,其中仅分配了
*(a+i)
for循环中的值是多少

2) 分配
*(a+i)
时,该值准确地存储在哪里

3)
*s++
(*s++
*+++s
++*s
之间有什么区别

4) 为什么当我打印指针a类似于s时,值会增加1


提前感谢!:)

你需要先学习指针。 这可能有帮助:

1)

变量
a
s
指向相同的内存位置

(二)

如果说
a+1
,指针
a
的值将增加其类型(1*4)的1倍。因此,如果您说
*(a+1)
,则从下一个整数中获取值。您可以将变量视为数组,因为它指向大小为4个整数的内存位置。您还可以访问如下值:
a[0]、a[1]、a[2]和a[3]

(三)

*s++
:取该指针的值,在该语句之后,指针
s
递增4

`(*s)++':获取指针的值,然后将该值增加1

*++s
:将指针
s
增加4,然后取其值

++*s
:获取指针
s
的值并将其递增1

(四)

由于指针
s
和指针
a
指向同一个内存位置,并且您调用
*s++
,该内存位置的值将增加一个。

1和2)指针指向(或者您可以说它是某个内存位置的地址)。因为您分配了
a=s=(int*)malloc(4*sizeof(int))
a
s
都具有相同的地址,或指向相同的内存位置。如果内存位置的内容发生任何更改(例如,在代码中,您正在为分配的内存分配数字),那么只要您有正确的地址(
a
s
都指向同一位置),您就可以看到内容的更改

一个粗略的类比是,你要一所房子(
malloc
),它会还给你房子的地址(
A
)。然后你决定房子很丑,你想重新粉刷它(赋值:
*(a+i)=i+10
),你告诉地址的其他人(
s
)会看到你的房子已经重新粉刷过了

(三)

*s++
表示访问当前地址的内容,然后增加指针(地址)

回到您的代码,它访问第一个元素,然后地址将指向第二个元素

(*s)+
表示访问当前地址的内容,以后增加当前地址的内容

回到您的代码,它在递增第二个元素之前获取该元素的内容。下一个print语句显示已递增的第二个元素的内容

*++s
表示递增当前地址,并在递增的地址访问内容

回到您的代码,它将获得第三个元素的内容

++*s
表示在当前地址增加内容,并访问增加的内容

回到您的代码,它获取第三个元素的递增内容

(四) 正如前面部分所解释的,如果您通过一个指针修改内容,那么如果您有相同的指针(地址),您将看到它。实际上,您正在修改内存地址的内容(如3中所述),因此在重复该过程时,您可能会看到修改的效果

a=s= (int *) malloc(4*sizeof(int)); 
此语句将内存分配给“s”,并将相同的内存分配给“a” 例如,我会说分配的地址是2000,通常是十六进制,只是为了理解,我会取十进制值。
对于(i=0;i请在提问之前搜索网站。已经有很多问题与基本相同。这些是重要的问题,不应该被否决
a=s= (int *) malloc(4*sizeof(int)); 
 {

  *(a+i)=i*10;

 printf(" %d ",*(a+i));

   }
         +--------+---------+----------+---------+
         |0       |   10    |     20   |    30   |
         |        |         |          |         |
         +--------+---------+----------+---------+
 Address 2000     2004      2008       2012