int
*p
int
a
int
b[1]
p
=
&a
p
=
b
指针的赋值,“=”的左操作数可以是*p,也可以是p。
当“=”的左操作数是*p时,改变的是p所指向的地址存放的数据;
当“=”的左操作数是p时,改变的是p所指向的地址。
数组的变量名b表示该数组的首地址,因此p=b;也是正确的.
同类型的指针赋值:
int
val1
=
18,val2
=
19
int
*p1,*p2
p1
=
&val1
p2
=
&val2
p1
=
p2
//注意啦,p1指向了val2,而没有指向val1
错误的,不能用赋值语句将一个字符串常量直接给一个字符数组赋值。
chars[20]
charss[]="hello"
s=ss错误原因是:是您不能使用赋值语句将一个字符数组直接赋值给一个字符串数组,也就是说,必须使用strcpy()函数来实现一个字符串的副本(在c语言中,但是在c++的string类中,上面的赋值是正确的)。
因为赋值字符“=”右边的表达式也可以是赋值表达式,下面的形式变量是=(变量=表达式)这是真的,所以它是嵌套的。展开后的一般形式为:variable=variable=…=表达式例如:a=b=c=d=e=5根据赋值运算符的正确啮合,其有效等价为:e=5D=eC=d.B=C.A=B
Chara[]="toyou"正确的理由:因为当你声明一个数组变量时,你只是为它腾出空间并初始化它,这是c语法。
扩展资料:
C语言中字符串赋值的理解
一、指针式赋值
上面的例子很明显,也很容易理解。但是下面的方法有点难以理解。
通过程序的运行,我们可以知道:char*p="hello"这个字符串赋值非常好。为了理解这个赋值,我们首先需要理解双引号在这个语句中的作用(注意:这是双引号,不要使用单引号)。双引号有三个主要作用:
(1)申请了空间(在常量区),存放了字符串。
(2)在字符串尾加上了“\0”。
(3)返回地址。
这里所返回的地址就赋值给了char*类型的指针变量p。
二、通过字符数组直接把字符串赋值。程序如下:
三、需要注意的一些问题
直接把字符串赋值给数组名(也就是数组首元素的首地址)是不行的。
你那样只是定义了5个指针,并没有给每个指针分配相应的内存空间,当然会出错gets函数的参数是一个字符指针,应该用gets(p[i])
char
*p[5]
char
*d
char
p1[5][20]
int
i,j
printf("输入5个城市\n")
for(i=0i<5i++)
{
p[i]
=
p1[i]
gets(p[i])
}
.......