Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
955 views
in Technique[技术] by (71.8m points)

C:Pointer Arithmetic -How does it work?

I'm new to C programming and trying to understand how pointer arithmetic works. The below printf statement prints 2 when the arguments for printf is *(p+2) and 4 with for *p. Could you please explain this behaviour ?

#include <stdio.h>
#include <conio.h>

int main()
{
    int arr[4] = {4,3,2,1}, *p = arr;
    printf("
%d", *(p+2));

    return 0;
}
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Let's re-write your program to make it a little clearer:

#include<stdio.h>

int main(void)
{
    int arr[4] = {4,3,2,1};
    int *p = arr;
    printf("
%d", *(p+2));
    return 0;
}

Now, *(p+2) is by definition the same as p[2]. Since p points to the first element of arr, then p[2] is the same as arr[2] which is equal to 2.

Similarly, *(p) is the same as *p and since p points to the first element of arr then *(p) is 4.

You probably need to re-read the section in your text book that covers pointer arithmetic.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...