C语言为什么可以赋给一个指针以常量?求解

如题所述

char s[10]; s="BOOK"是不对的,s是数组内存的首地址,首地址是不能改的,只能访问,不能将字符串常量的地址赋给S,就算能赋,你想啊,原来s是保存数组的地址,你赋值后,就变成了字符串常量的地址,那数组的内存不就不能访问了,这是不允许的,追问:
关于数组名的搞忘了,想起来了。难道”BOOK“也指的是个地址,而不是数组内容?给指针赋内容不应该用*是*S=
"BOOK";么?回答:
"BOOK"在这里是一个字符串常量,像你说的,是常量,它有一个地址,有一段内存区域,里面的内容就是"BOOK"这几个字符,不是数组内容,C语言里表示字符串就是用字符串常量和数组两种方式。
*除了作为乘法符号外,也是解引符号,比如int *p, p是一个指针,给它赋址p=&a,这里a是一个变量(int a=2),p保存了a的地址,解引就是访问p所指向的变量的内容,意思是int c = *p, 和int c=a是一样的,*s是解引,访问它的内容,而且是访问当前指针指向的字符,s="BOOK"是赋值,把字符串的地址赋给s追问:
谢了。大概我能明白了。有个小疑问:常量不应该在内存中有地址的?就是”BOOK“应该无地址才对.除非把它当作个默认数组来处理,像perl里的@_?纯粹操蛋了,可以不回答、回答:你这样想char *s; 定义了一个字符指针变量,用来保存字符变量的内存地址
s="BOOK",可以赋值,那说明"BOOK"是有地址的
你可以当做数组来处理,比如你可以这样操作:char cr=s[0]; s[1]='n';都是可以的,追问:
你说的我能明白。偶尔喜欢较真下。再等等,看有没有知道这个详细点的高手。到时再一起采纳你的。晚安米若de奇的感言:
温馨提示:答案为网友推荐,仅供参考
相似回答