I have `libx.so`, and it exports a function and a global `char *`,

```
char *c_ptr = 0;

void foo(char *s)
{
    c_ptr = s;
}

```

In python, I pass a `str` to `foo` in 2 ways,

```
>>>libx = ctypes.CDLL("./libx.so")
#pass a raw str
>>>libx.foo("string")

#pass a c_char_p object
>>>libx.foo(c_char_p("strng"))

```

**Q**

1.I think, `libx.foo("string")` passes a Python `str` object to a C function which will later assign the string to `char *c_ptr`. I wonder, will `c_ptr` points to the `str` object `"string"` after the call `foo`? Cuz I presume the `str` object `"string"` will be garbage-collected after the call to `foo`, right?

2.Are the 2 ways (passing `"string"` and `c_char_p("string")`) difference in effect?
Are they different in effect?