c语言字符串指针

Python012

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

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

如果输入12345,那么p指向1,即p中存放着1的地址。没有字符串的指针和指针指向的内容不能修改一说。无论什么类型的指针,只要是“常指针”就有三种情况不可改变:

指针是常量——这个指针只能指向申明时指向的目标,不能指向别处。

指向的内容是常量——不能通过这个指针改变指向的内容,但指针可以指向别处,也可以通过其他方法改变该指针指向的内容。

指针和指向的内容都是常量——这时指针不能再指向别处,它指向的内容也不可通过这个指针修改(用其他方法修改内容仍然是可以的)。

数组名是常量指针,所以指针不能再指向别处(即改变指向)。

这个问题中,p是普通指针,所以可以改变指向;p指向的内容是由malloc申请的自由空间,所以它们的内容肯定是能够改变的,否则申请这个空间就没有多少意义了。