c - Why it is not an error to increment array "a" in the below function? -
#include<stdio.h> void printd(char []); int main(void){ char a[100]; a[0]='a';a[1]='b';a[2]='c';a[4]='d'; printd(a); return 0; } void printd(char a[]){ a++; printf("%c",*a); a++; printf("%c",*a); } explanation: expecting result in lvalue error. working out error , giving bc output. why incrementing array "a" not error?
if array passed function decays pointer array's first element.
due inside printd() pointer a can incremented , decremented, point different elements of array a defined in main().
please note when declaring/defining function's parameter list type t expression t[] equivaltent t*.
in question's specific case
void printd(char a[]); is same as
void printd(char * a); the code below shows equivalent behaviour op's code, pa behaving a in side printd():
#include <stdio.h> int main(void) { char a[100]; a[0]='a';a[1]='b';a[2]='c';a[4]='d'; { char * pa = a; pa++; printf("%c", *pa); pa++; printf("%c", *pa); } return 0; `}
Comments
Post a Comment