求一LuXiangxi偶像练xi生12期百度云云

关于C语言的几道基础题
关于C语言的几道基础题
发布时间: 12:27:19
编辑:www.fx114.net
本篇文章主要介绍了"关于C语言的几道基础题",主要涉及到关于C语言的几道基础题方面的内容,对于关于C语言的几道基础题感兴趣的同学可以参考一下。
1.如果int a = 1, b = 2, c = 3, d = 4;则条件表达式 &a & b ? a : c & d ? c : d& 的值为__?
解析:条件操作符?:的结合性为从右至左,那么表达式的结合性用括号表示:(a & b ? a : (c & d ? c : d))
2.已知 i = 10; 表达式 &20 - 0 &= i &= 9& 的值为__?
解析:在双目运算符中,算术运算符的级别最高,关系运算符次之,逻辑运算符最低。表达式的结合性用括号表示(20 - 0) &= i &= 9
3.已知 int x = 1;执行语句 &y = ++x & 5 && ++x & 10;& 后变量 x 的值为__?
解析:表达式中单目运算符++最高, 关系运算符级别高于逻辑运算符,赋值运算符=的级别最低。表达式的结合性用括号表示y = ((++x) & 5) && ((++x) & 10), 对于逻辑运算符&&,前面部分为假时则不会计算后面部分,所以((++x) & 5) 的结果为假后,后面的((++x) & 10)不再进行计算,所以 x 的结果为2,y 的结果为0。
4.已知 int i = 1; 执行语句&while(i++ & 4);&后变量 i 的值为__?
解析:n++表示先使用变量n的值,然后将n的值增1;++n表示将n的值增1,然后再使用变量n的值。再例如:*ptr++ 与 *(ptr++) 结果是一致的,都表示&先*ptr,然后ptr++&。
5.宏定义:
#define PR(fmt, val) printf(#val & = %& #fmt &/t&, (val))
#define NL putchar('/n')
#define PRINT1(f, x1) PR(f, x1), NL
那么,PRINT1(d, 5);扩展后的结果?
//这个调用先扩展为 RP(d, 5) NL
//然后再扩展 printf(#5 & = %& #d &/t&, (5)), putchar('/n')
//最后扩展 printf(&5 = %d/t&, (5)), putchar('/n'))
摘自《C语言解惑》
6.编程风格关于选择正确的条件
}while(A);
//第一次改造,先消除“多余的” continue 语句
&if(A) { B; C; }
}while(A);
//第二次改造,再把 &do ... while& 和 if 语句替换为 while 语句
while(c = getchar() != '/n')
&if(c == ' ')
&if(c == '/t')
&if(c & '0')return (OTHER);
&if(c &= '9')return (DIGIT);
&if(c & 'a')return (OTHER);
&if(c &= 'z')return (ALPHA);
&return (OTHER);
return (EOL);
while(c = getchar() != '/n')
&if(c &= 'a' && c &= 'z')return ALPHA;
&else if(c &= '0' && c &= '9') return DIGIT;
&else if(c != ' ' && c &= '/t') return OTHER;
return (EOL);
摘自《C语言解惑》
7.关于指针的一个小题
*p++ = *(p++)
*++p = *(++p)
++*p = ++(*p)
int a[3][3] = {{1, 2, 3},{4, 5, 6},{7, 8, 9}};
a和a[0]求值为同一个地址,但是它们是有区别的,它们的类型不同,这会导致在对地址进行算术运算时体现出同,a+1和a[0]+1意义不同,前者指向下一个三元的int数组,后者指向下一个int整数指针。
一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!
二、互相尊重,对自己的言论和行为负责。
本文标题:
本页链接:1323人阅读
计算机程序设计(66)
一、指针变量作为参数
void set_time(int *time);
void set_time_copy(int time);
void main()
int time_copy = 3;
set_time(ptr);
set_time_copy(time_copy);
printf(&%d,%d&,ptr[0],time_copy);
void set_time(int *time)
*time = 4;
void set_time_copy(int time)
二、指针和数组变量一样都是一个内存地址,所以C语言可以用指针来表示数组,太灵活了,呵呵
正如《The C Programming Language》里说的:
In C, there is a strong relationship between pointer and arrays, strong enough that pointers and arrays should be discussed simultanesly. Any operation that can be achieved by array subscripting can also be done with pointers.
void main()
int list[] = {1,2,3};
printf(&0x%x,0x%x,0x%x\n&,list,ptr,&list);
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:609015次
积分:7041
积分:7041
排名:第3034名
原创:123篇
转载:93篇
译文:10篇
评论:45条
(2)(1)(8)(3)(1)(2)(1)(1)(5)(3)(5)(6)(5)(9)(4)(1)(8)(1)(1)(1)(2)(4)(1)(1)(1)(5)(7)(2)(3)(4)(2)(2)(2)(3)(10)(1)(10)(7)(1)(1)(2)(2)(10)(12)(13)(23)(13)(12)(14)C语言的指针类型详细解析
字体:[ ] 类型:转载 时间:
C语言的指针类型包括两方面的信息:一是地址,存放在指针变量中;二是类型信息,关乎于读写的长度,没有存储在指针变量中,位于用该指针读写时的mov指令中,不同的读写长度对应的mov指令不同
指针存储了内存的地址,同时指针是有类型的,如int*,float*,那么,一个自然的猜想就是指针变量应该存储这两方面的信息:地址和指针类型,比如,就像下面的结构体: 代码如下:struct pointer{&&&&&&}举个例子:打印sizeof(int*),值为4,可见4字节是存储内存地址用的,反过来就说明指针并没有存储类型信息的地方,那么指针的类型信息存放在哪儿呢?下面剖析一段简单的代码。 代码如下:// ma.cpp : 定义控制台应用程序的入口点。#include "stdafx.h"char *
void main(){ pi=&*pi=12;}反汇编结果: 代码如下:pi=&0041137E C7 05 78 71 41 00 7C 71 41 00 mov&&&&&&&& dword ptr [pi (417178h)],offset gi (41717Ch) *pi=12; 78 71 41 00&& mov&&&&&&&& eax,dword ptr [pi (417178h)] 0041138D C6 00 0C&&&&&&&& mov&&&&&&&& byte ptr [eax],0Ch }可见byte就说明了指针类型的信息。总结:C语言的指针类型包括两方面的信息:一是地址,存放在指针变量中;二是类型信息,关乎于读写的长度,没有存储在指针变量中,位于用该指针读写时的mov指令中,不同的读写长度对应的mov指令不同。
另外:在指针强制转换时,也是这个原理。就是指针强制转换的影响不是在转换的时候发生,而是在用转换后的身份去访问内存时体现到了指令中。
那么指针在什么情况下转换是安全的呢?就是看用这个转换后的身份去访问内存是否安全。简要的说有以下原则:如果转换后指针指向的数据类型大小小于原数据类型大小,那么用该转换后的指针访问就不会越过原数据的内存,是安全的,否则危险,要越界。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具}

我要回帖

更多关于 网易云音乐 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信