C语言字符串指针问题

Python019

C语言字符串指针问题,第1张

让p指向常量字符串hello的首地址,即p中存hello的第一个字符在内存中的地址,p="hello"

就等于把字符串首地址赋给了指针变量p

希望能够帮到您

补充您的提问如下:

这虽是一个赋值表达式,但不是把内容hello赋给指针p,p的内容仍是地址,是字符串hello的首地址,实际上此表达式就是把字符串首地址赋给p,让p指向常量字符串hello的内存单元,就是这个意思,有点绕,希望您明白了。

你的说法有些混乱——C没有字符串变量,自然不可能有字符串的指针;C中只有数组的指针和数组首指针,一维数组的首指针是指向第一个元素的指针,类型是元素的类型,操作一维数组的指针就是这个“首指针”;而数组指针是二级指针,与“首指针”有很多不同,最显著的是首指针+1是第二个元素(下标为1)的地址,而数组指针+1就跑到这个一维数组结束后的那个地方了(要跳过这个一维数组的所有元素)。“即指针名是指向第一个字符的地址”这个说法也不对,应该是“指针名(严格应该叫数组名)是指向第一个字符的”,或“指针名的值是第一个字符的地址”。至于为什么“能用char *s=“abc”;strlen(s)测出s的长度”,那是由于strlen这个函数从()中的指针的地址开始一个单元一个单元(因为一个字符是一个8位单元或叫空间)地向后数,一直数到'\0'为止,把不计'\0'这个单元的累加值返回了,所以就得到了“字符串”的长度。这和printf("%s\n",p)能把p为首地址的“字符串”完全输出是一样的道理。

定义成字符数组的时候,数组名就是指向数组的首地址的指针,数组在一串连续的地址中,当执行复制向后移动指针的时候会依次读取字符,没问题,但是如果是指针,它指向的是在静态区的一串字符串的首地址,你要把指针向后移动,他的下一个指针指向何处就是个问题了,也就是你访问了不属于你的内存地址,所以出错了!!!