Different way of accessing array elements in C

前端 未结 8 2307
有刺的猬
有刺的猬 2020-11-30 04:49

I am a teaching assistant for a C programming course, and I came across the following line of C code:

char str[] = \"My cat\'s name is Wiggles.\";
printf(\"%         


        
相关标签:
8条回答
  • 2020-11-30 05:33

    Example Code.

    #include<stdio.h>
    int main(){
        int arr[] = {1, 2, 3};
        for(int i = 0; i <= 2; i++){
            printf("%d\t", i[arr]);
        }
        return 0;
    }
    

    Output:1 2 3

    0 讨论(0)
  • 2020-11-30 05:38

    It's basically just the way C works. str[5] is really equivelent to *(str + 5). Since str + 5 and 5 + str are the same, this means that you can also do *(5 + str), or 5[str].

    It helps if you don't think of "5" as an index, but rather just that addition in C is commutative.

    0 讨论(0)
  • 2020-11-30 05:38

    if str is an array of type char, then we can access any index say i as below-

    1. str[i]
    2. *(str + i)
    3. char *p = str, then access the index i as p[i] or *(p+i)
    0 讨论(0)
  • 2020-11-30 05:44

    str[5] directly translates to *(str + 5), and 5[str] directly translates to *(5 + str). Same thing =)

    0 讨论(0)
  • 2020-11-30 05:47

    Its all same. *ptr or ptr[0] actually means *(ptr+0). So whenever you write *ptr or ptr[0] it goes as *(ptr+0). Let say you want value at ptr[4] so it means you can also write it as *(ptr+4). Now whether you write it as *(ptr+4) or *(4+ptr), it's same. so just for understading if you can write *(ptr+4) as ptr[4] same way *(4+ptr) is same as 4[ptr]. Please go through http://en.wikipedia.org/wiki/C_syntax#Accessing_elements for more details.

    0 讨论(0)
  • 2020-11-30 05:49

    Similarly, since the expression a[i] is semantically equivalent to *(a+i), which in turn is equivalent to *(i+a), the expression can also be written as i[a] (although this form is rarely used).

    http://en.wikipedia.org/wiki/C_syntax#Accessing_elements

    0 讨论(0)
提交回复
热议问题