char
*str
str="l
love
china"
指针
str
是指向字符的,也就是指向了一个地址
赋值为str="l
love
china"
这里指针str的值也就是字符串
"l
love
china"
的首地址
而输出的时候puts(str)
puts中的参数当然也是首地址了,如果puts的参数是字符数组,那实际上也是地址,因为数组的名字就是数组第一个元素的地址。当地址是字符串的地址时,指针会自动下移一个位置。直到遇到'\0'为止
而下面这个
char
*str
scanf("%s",str)
指针没有初始化,所以是不对滴。
其实在c语言中想要动态输入字符串(也就是不浪费空间,还是很麻烦的),直到怎么回事就行,不必太纠结这个问题
如果输入12345,那么p指向1,即p中存放着1的地址。没有字符串的指针和指针指向的内容不能修改一说。无论什么类型的指针,只要是“常指针”就有三种情况不可改变:
指针是常量——这个指针只能指向申明时指向的目标,不能指向别处。
指向的内容是常量——不能通过这个指针改变指向的内容,但指针可以指向别处,也可以通过其他方法改变该指针指向的内容。
指针和指向的内容都是常量——这时指针不能再指向别处,它指向的内容也不可通过这个指针修改(用其他方法修改内容仍然是可以的)。
数组名是常量指针,所以指针不能再指向别处(即改变指向)。
这个问题中,p是普通指针,所以可以改变指向;p指向的内容是由malloc申请的自由空间,所以它们的内容肯定是能够改变的,否则申请这个空间就没有多少意义了。