已知:int i,j=7,*p=&i;,则与i=j;等价的语句是
*p=j;
设有定义:struct {char name[12]; int a; double b;}t1,t2;,
且变量均已正确赋值,则以下语句中错误的是( )
t2.name=t1.name;
下面程序的输出结果是( e )
#include<stdio.h>
void main()
{
char s[]="cent";
printf("%c\n",*s+2);
}
第一题
&i是获取i变量的地址,p=&i是p指针指向i的地址,*p=j是对p指针指向的地址进行赋值, 因为p指向i的地址,所以i也被赋值了。
第二题
结构体t1和t2变量可以相互赋值的,但是结构体中的name是字符数组,也就等同字符指针,
对字符数组赋值是要改变数组的地址,但数组的地址不能改变, 所以t2.name=t1.name是错误的
对t2.name内容赋值应该用 strcpy(t2.name,t1.name);
第三题
s[]是字符数组,也就等同字符指针,s是数组的首元素的地址, *s就是获取数组首元素的值'c',等同s[0],加2运算是对c的ASCII码值加2,结果就是'e'
第一题:p=&i,表明指针变量p对i取地址,也就是p中包含了i的地址,对p赋值,则对于p内地址所包含的内容就是被赋予的值,那么p中包含的i的值也就是赋予p得值。所以第一题用j给p赋值可以得到i也被赋值。
第二题:结构体定义的变量是可以相互赋值的,但是不能加减乘除运算,在这个题中,t1和t2他们代表的是当前结构体的名字,也就是表明这个结构体类型,不是产量,如果用这个结构体定义变量,那么他们之间就可以相互赋值。
第三题:定义的s[]可以理解为一个数组,也可以理解为一个指针,s+2表示对s[0]解引用,就是获得他的值,也就是c,然后执行加2的运算,也就是c的ASCII码值加2,然后再进行类型转换,就是e
第二题,char name[12] 是字符串数组,字符串是不能直接赋值的,需用 strcpy()函数拷贝。