先写 HL的笔试题目
int a[4]; a++;是错的 因为 a代表了一个常量的地址。
百度解释:
对于一维数组,数组名代表的是数组的首地址,而且数组名是一个常量地址,也就是说数组名的地址是不可改变的。因此数组名是一个地址,对数组名使用加法运算,会使地址移到下一个位置。就你的例子而言,数组名a指向的是数组中第一个元素的地址,如果使用a+1,则使a指向了数组中第二个元素的地址,要访问地址中的元素,需要使用指针。而对于常量而言,是不能使用a++这样的语句的,也就是说不能使用诸如3++这样的语句。你要把数组的地址加1,需要使用a+1; 举个例子:int a[]={1,2,3}cout<<(a+1)[0]<<*(a+1)<<endl; 结果都输出2,因为这时a+1的地址是数组中第二个元素的地址。而*(a+1)表示的是访问这个地址中存储的值,(a+1)[0]与使用*(a+1)笑果是一样的 若定义了char ch[]={"abc\0def"},*p=ch;则执行printf("%c",*p+4);语句的输出结果是()A def B d C e D 无确定值为什么选择C?
注意,不是*(p+4),而是*p+4,是‘a‘的ascii码加4,就是‘e‘了
#include<stdio.h>
int main(){
struct{
int ss;//4
short a;//2
char b;//1
float c;//4 float 和 int 代表了 相同的 大小 应该是 结构体名称 还会占用一个大小 否则说不通了
}cs;
printf("%d\n%d\n%d\n%d\n%d\n",sizeof(cs),sizeof(cs.a),sizeof(cs.b),sizeof(cs.c),sizeof(cs.ss));
}
这题的关键在int *ptr=(int *)(&a+1);这一句上,&a表示取得数组a存储区域的首地址,再加1表示数组a存储区域的后的地址,这就使得ptr指针指向数组的最后一个元素后面的那个存储单元的地址,而ptr减1后,再进行数据访问,则访问的是ptr指针的前一个存储单元的值,所有最后的答案是2,5
好像 基本 没几题目是对的 ,妈蛋~~
#include <stdio.h> int main(char *argv[], int *argc) { int i=3; int j; j = sizeof(++i+ ++i); printf("i=%d j=%d", i ,j);//3 4 } http://blog.sina.com.cn/s/blog_4762d6850100y1kl.html 上述程序,为什么打印出来的i=3呢, 我理解的是5
在 sizeof 中的所有运算 都失效了。 而且表示的是int
解答::
根据C99规范, sizeof是一个编译时刻就起效果的运算符,在其内的任何运算都没有意义, j = sizeof(++i+++i); 在编译的时候被翻译成 j=sizeof((++i+++i的数据类型)) 也就是 j = sizeof(int); 也就是 j= 4; (32bit系统,如果是16位系统,则j=2) 然后才会继续编译成最终的程序,当然在最终程序执行的时候,自然不会执行任何++i了。void f1(int *, int); void f2(int *, int); void(*p[2]) ( int *, int); main(){int a;int b; p[0] = f1;p[1] = f2;a=3;b=5; p[0](&a , b);printf("%d\t %d\t" , a ,b); p[1](&a , b);printf("%d\t %d\t" , a ,b);} void f1( int* p , int q){int tmp;tmp =*p;*p = q;q= tmp;} void f2( int* p , int q){int tmp;tmp =*p;*p = q;q= tmp;}
const char i= 3; 常数 i 一定占用存储空间么?? 母鸡
http://www.cnblogs.com/steararre/archive/2012/03/21/2410179.html
电平: 1 0
TTL 输出 L: <0.8V ; H:>2.4V。
输入 L: <1.2V ; H:>2.0V
CMOS 输出 L: <0.1*Vcc ; H:>0.9*Vcc。
输入 L: <0.3*Vcc ; H:>0.7*Vcc.
RS232 逻辑1的电平为-3~-15V,逻辑0的电平为+3~+15V,注意电平的定义反相了一次。
数据队列 如何用C语言实现 从小到大排序。
这两者的区别在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。