They are the same when passing an array into a function, however, they are NOT the same in general. Consider the following code snippet:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *mod_string(char *str) {
puts(str);
str[0] = 'h';
puts(str);
return str;
}
int main() {
char hello_world[] = "Hello world";
mod_string(hello_world);
}
If you run this, you will get
Hello world
hello world
However, if you change the first line of the program to
char *hello_world = "Hello world";
When you run the program the output will be
Hello world
Segmentation fault (core dumped)
I'll leave it to the C experts to properly explain this, but I just wanted to point out that the notation differences are NOT syntactic sugar.