谢谢,想请问一下这道题。执行以下程序段后,m的值是 ?
int a[]={2,1,3,5,4};
int m=10,k,*ptr=a; for(k=0;k<5;k++) m+=*(ptr+k);
m+=*(ptr+k);等价于m=m+*(ptr+k);
*(ptr+k)实际上就是ptr指向数组a的第k个单元,即a[k]
k=0 m=m+*(ptr+0)=m+a[0]=10+2=12;
k=1 m=m+*(ptr+1)=m+a[1]=12+1=13;
k=2 m=m+*(ptr+2)=m+a[2]=13+3=16;
k=3 m=m+*(ptr+3)=m+a[3]=16+5=21;
k=4 m=m+*(ptr+4)=m+a[4]=21+4=26;
k=5 退出循环
所以程序的功能就是将m与数组a的所有元素加起来后再赋给m
*(ptr+k) ,k只代表循环次数而没有加进去咯。
追答ptr+k表示的是ptr偏移k个单元对应的那个单元,由于ptr指向的数组a的起始地址,所以ptr偏移k个单元实际上就是a[k]的地址
*(ptr+k)就是取出地址为ptr+k的单元的内容,也就是a[k]的值
谢谢你~~
想再请问下这题~若要打开当前目录中的文本文件abc.txt进行只读操作,则下面符合此要求的函数调用是?A. fopen("abc.txt","rb");
B. fopen("abc.txt","r");
C. fopen("abc.txt","a");
D. fopen("abc.txt","w");
为什么选b呢
双引号难道不是选a么
追答A 是要以二进制读方式打开文件,不符合要求,对文本文件的只读操作就用"r"
追问那为什么不是a,w呢?r是有特殊意义吗
追答r表示只读
w表示可写
a表示追加
哦哦,好吧〒_〒谢谢
那这个呢?执行以下程序段后,m的值是 ?
int a[]={2,1,3,5,4};
int m=10,k,*ptr=a; for(k=0;k<5;k++) m+=*(ptr+k);
哈哈我只是初学者而已,刚学到指针
追问一样是初学者~
追答把a地址赋给ptr意味着*ptr=a[0] *(ptr+1)=a[1]
m=m+*(ptr+k)
当k=0时,m=10+a[0]=12 其他依次类推就可以算出结果
k=1时,m=12+a[1]=13
追问谢谢你= ̄ω ̄=
追答没有事情我今天刚学到这里
最后是不是25?
我口算得
追问26吧
追答哈哈,你算下啊
方法就是那样
追问m+=*(ptr+k);等价于m=m+*(ptr+k);
*(ptr+k)实际上就是ptr指向数组a的第k个单元,即a[k]
k=0 m=m+*(ptr+0)=m+a[0]=10+2=12;
k=1 m=m+*(ptr+1)=m+a[1]=12+1=13;
k=2 m=m+*(ptr+2)=m+a[2]=13+3=16;
k=3 m=m+*(ptr+3)=m+a[3]=16+5=21;
k=4 m=m+*(ptr+4)=m+a[4]=21+4=26;
k=5 退出循环
所以程序的功能就是将m与数组a的所有元素加起来后再赋给m
嗯嗯,
追答最后21+4=26?
追问嗯,我原题貌似有问题a应该是12345吧
ptr+k表示的是ptr偏移k个单元对应的那个单元,由于ptr指向的数组a的起始地址,所以ptr偏移k个单元实际上就是a[k]的地址
*(ptr+k)就是取出地址为ptr+k的单元的内容,也就是a[k]的值
实在不行程序计算机上执行下
追问嗯嗯,好的
追答不用记得那么麻烦
实际上就是ptr[i]=a[i]
=*(ptr+i)=*(a+i)
就是把ptr当做和a一模一样
追问嗯嗯对哈,这样很容易看懂~
追答你搞哪样是理解但很绕
追问嗯嗯
那你知道为什么这题选b么?~若要打开当前目录中的文本文件abc.txt进行只读操作,则下面符合此要求的函数调用是?A. fopen("abc.txt","rb");
B. fopen("abc.txt","r");
C. fopen("abc.txt","a");
D. fopen("abc.txt","w");
我虽然没有学过这个函数,但是明显他考察你的记忆
我虽然没有学过这个函数,但是明显他考察你的记忆
r等于英文的read
w=英文write
就是读写意思呵呵
其实这个东西你翻下书就可以啊没有必要问,完全属于记忆题目
你其实通过题目可以看出你那块不懂返回书本去学会,要是只为做题没有意义
追问〒_〒好吧