- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
主题作业三:函数与结构
数组变量名也是指针
访问结构指针所指向的结构的成员变量时用-, 访问结构的成员变量时用.
成员s是数组,不能直接赋值(但是初始化数组的时候可以,例如char s[10]=”abc”; 那是由编译器在编译阶段完成的)
一.单选题
针对如下定义,合法的表达式是__C___。
struct node {
char s[10];
int k;
} p[5];
A.p.k=2B.p[0]-k=2 C.(p-s)[0]=‘a’p[0].s=“a”p指向a[1];然后p+1指向a[2],即元素9的位置;
然后(int*)(p+1)则是将指针强制转换为一个整数指针,位置不动,还是9的位置;
+2操作则把上面的整数指针向后移动2个,即指向11的位置;
针对如下定义:
static struct {
int x, y[3];
} a[3] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}}, *p;
p = a+1;
表达式*((int *)(p+1)+2)的值为__D___。
A.3B.7C.1011-的优先级高于++,该表达式等价于++(p-str)
所以,++作用于p的成员变量str上。
执行后的结果是:指针p不变,但是它指向的结构的成员str加1
对于以下结构定义,++p-str中的++加在__A___。
struct {
int len;
char *str;
} *p;
A、指针str上 B、指针p上 C、str指的内容上 D、以上均不是
根据声明int (*p)[10], p是一个__A___。
A.指针B.数组C.函数D.数组元素第4题解答:注意:int (*p)[10] 和 int *p[10]是完全不一样的
int *p[10]定义了一个数组,其元素类型为int*;此时sizeof(p)为40。
int (*p)[10]定义了一个指针,其类型是长度为10的整型数组;此时sizeof(p)为4。
若下面程序中所有的变量均已声明或定义,则下列选项中的变量能够在fun()中使用的是__A___。
#include stdio.h
void fun(int x)
{
static int y;
变量遵循先声明再引用的原则
x作为函数fun的形式参数变量,已经声明为int型,可以使用
y是函数fun的局部静态变量,也已经声明,也可以使用
z 在fun之后定义,之前没有声明,不能使用
a,b则是函数main的局部变量,fun不能使用。
注意:这里的先后顺序只得是编译器编译语句的顺序,不是语句运行的先后顺序。因为if/switch分支、for/while循环等流程控制语句可能动态的控制程序语句的执行次序,所以语句的执行次序不是固定的。
……
return;
}
int z;
void main( )
{
int a,b;
fun(a);
……
}
A.x, yB.x, y, zC. a,b,y,zD.a,b,x,y,z
填空题
对于下面的定义,(s[0].b)/(++p)-a的值为__0___。
s[0] 为{2,4},s[1] 为{6,8}。
s[0].b为4
p初始指向s[0],++p指向s[1],故(++p)-a的值为6
因为4/6为0,所以。。。。
struct {
int a;
int b;
} s[2]={2,4,6,8}, *p=s;
结构数组a[3]在内存中也可以看做是一个长度为12的整数数组:1,2,3,…, 11,12。
p的初始地址为a+3,那么p-1指向a[2],即元素9的位置
(int*)将p-1强制转换为一个整型指针,但是还是指向9的位置。所以-1作用在整型指针(int*)(p-1)上,得到9的前面一个整数元素的地址,即8的地址。
下列程序段执行后,z的值是 _8_。
static struct {
int x, y[3];
} a[3] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}}, *p=a+3;
int z;
z=*((int *)(p-1)-1);
下列代码段将会打印出__COND___。
c是一个指针数组,c[0]指向字符串”FIRST”,c[1]指向字符串“SECOND”,c[2]指向字符床“THIRD”。
*(c+1)为c[1],所以i*(c+1)+2指向字符SECOND中的C.
char *c[3]={“FIRST”, “SECOND”, “THIRD”};
printf(“%s”, *(c+1)+2);
参考第8题的解释
下列程序段的输出结果是_fgh
文档评论(0)