c语言字符串指针

Python011

c语言字符串指针,第1张

那不都是“人规定”的嘛!C/C++没有字符串变量,所以字符串是利用字符数组(不是字符串数组,字符串数组是另一个意思,得用二维数组实现)操作的。由于数组是同类型元素的集合,只要知道首指针就可以操作了,所以字符串只是把字符数组的第一个元素(下标为0的元素)的地址赋给一个指针变量就可以通过这个指针变量做所有操作了……比如在printf("%s\n",string)中,在%s控制下并不是输出指针string的值,而是从string这个地址开始一个字符一个字符地把指针指向的字符打印出来,直到遇到'\0'为止;而用%p控制才能打印出string的地址值来。

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

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

希望能够帮到您

补充您的提问如下:

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

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