
C语言
LinuxSir_MianMian
这个作者很懒,什么都没留下…
展开
-
10、数组指针与指针数组(内存布局、理解、地址强制转换(题目))
1. 指针数组与数组指针的内存布局指针数组:首先它是一个数组,数组的元素都是指针,数组占多少字节由数组本身决定 数组指针:首先它是原创 2011-08-23 14:15:44 · 360 阅读 · 0 评论 -
4、 逻辑运算符“||”
int i=0;int j=0;if(( ++i>0 )||( ++j>0 )){ //打印出i和j的值}结果:i=1,j=0 原因:逻辑运算符“||”两边的条件只要有一个为真,其结果就为真;只要有一个结果为假,其结果就为假 i原创 2011-08-23 14:10:24 · 397 阅读 · 0 评论 -
5、关于++,--作为前缀和后缀
如果把括号去掉呢?如a = ++i+++i+++i;贪心法:C语言有个规则:每一个符号应该包含尽可能多的字符。也就是说编译器将程序分解成符号的方法是---从左到右一个一个字符的读入,如果该字符组成一个符号,那么再读入下一个字符时,判断已经读入的两个字符组成的字符串是否原创 2011-08-23 14:11:22 · 368 阅读 · 0 评论 -
6、指针1 (指针定义理解、将数值存储到指定的内存地址)
1.指针定义理解 一个“int *”类型的模子在内存中咔出了4字节的空间,然后把这个4字节大小的空间命名为p,同时限定这4字节的空间里面只能存储某个内存地址,即使存入别的任何数据,都将被当作地址处理,而且这个内存地址开始的连续4字节上只能存储某个int类型的数据2.将数原创 2011-08-23 14:12:24 · 543 阅读 · 0 评论 -
7、数组1---(定义、a,&a,&a[0]区别、以指针形式访问和以下标形式访问)(
1.数组定义 当定义一个数组a时,编译器根据指定的元素个数和元素类型分配确定大小(元素个数*sizeof(元素类型))的一块内存,并把这块内存的名字命名为a eg: int a[5] sizeof(a)=20原创 2011-08-23 14:13:16 · 399 阅读 · 0 评论 -
8、 关于a 和 &a区别的经典题目
main(){ int a[5] = {1,2,3,4,5}; int *ptr = (int *)(&a + 1); printf("%d,%d",*(a + 1),*(ptr - 1));} 分析:对指针进行加1,得原创 2011-08-23 14:13:54 · 314 阅读 · 0 评论 -
9、 定义和声明
1.定义是指编译器创建了一个对象并为它分配了内存,而声明只是创建了对象并没有分配内存2.定义只能出现一次,而声明能出现多次extern char a[]和extern char a[100]相同的原因: 因为这只是声明,不分配空间,所以编译器无须知道这个数组有多少个元原创 2011-08-23 14:14:37 · 186 阅读 · 0 评论 -
11、二维数组、数组参数和指针参数
1. 二维数组 内存不是表状的,而是线状的,二维数组也是线性存储的,如char a[3][4] 二维数组、数组参数和指针参数" name="image_operate_2871312729990734" alt="11. 二维数组、数组参数和指针参数" src="ht原创 2011-08-23 14:16:57 · 344 阅读 · 0 评论 -
12、链表反转
①链表反转单向链表的反转是一个经常被问到的一个面试题,也是一个非常基础的问题。比如一个链表是这样的: 1->2->3->4->5 通过反转后成为5->4->3->2->1。最容易想到的方法遍历一遍链表,利用一个辅助指针,存储遍历过程中当前指针指向的下一个元素,然后将当前节原创 2011-08-23 14:18:31 · 209 阅读 · 0 评论 -
13、关于结构体对齐的问题
对齐方式(规则):1)当结构体内的元素的长度都小于处理器的倍数的时候,便以结构体里面最长的数据元素为对齐单位,也就是说结构体的长度一定 是最长的数据元素的整数倍2)如果结构体内存在长度大于处理器倍数的元素,那么就以处理器的倍数为对齐单位。但是结构体内类原创 2011-08-24 15:33:00 · 484 阅读 · 0 评论 -
数据类型转换详解
规则:向高级的转换转换级别(Rank)由低到高:char 比如运算 a+b1)都是有符号或无符号 转换成较高级别(Rank)的,如unsigned int和unsigned long做算术运算都转换成unsigned long2)一边无符号,另一边有原创 2011-08-25 21:39:28 · 518 阅读 · 0 评论 -
3、关于return关键字
return用来终止一个函数并返回其后面跟着的值char *Func(void){ char str[30]; ........ return str;}str属于局部变量,位于栈内存中,在Func结束的时候被释放,所以返回str原创 2011-08-23 14:03:59 · 216 阅读 · 0 评论 -
2、const和define区别
编译器通常不为普通const只读变量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的值1. const定义的只读变量在程序运行过程中只有一份备份(因为它是全局的只读变量,存放在静态区);#define定义的宏常量在内 存中有若干个备份2. #def原创 2011-08-23 14:03:12 · 286 阅读 · 0 评论 -
函数指针
在程序运行中,函数代码是程序的算法指令部分,它们和数组一样也占用存储空间,都有相应的地址。可以使用指针变量指向数组的首地址,也可以使用指针变量指向函数代码的首地址,指向函数代码首地址的指针变量称为函数指针。1.函数指针定义函数类型 (*指针变量名)(形参列表);“函数原创 2011-08-23 13:23:56 · 169 阅读 · 0 评论 -
深入理解sizeof和strlen
一、好首先看看sizeof和strlen在MSDN上的定义:首先看一MSDN上如何对sizeof进行定义的:sizeof Operatorsizeof expressionThe sizeof keyword gives the amount of storage原创 2011-08-23 13:37:53 · 231 阅读 · 0 评论 -
软件工程师应养成的9种编程习惯
些人会想:只要程序运行结果好,就不管原程序编得怎样。但绝对不是这样的。软件不是一次性就作完的,有必要做修改,扩展等管理。所以原程序要尽量作成易看懂,管理方便。这样做,第一是为了软件开发者方便,其次还会影响到软件的性能。管理不方便的程序不会作出好的软件。希望通过这篇文章能学转载 2011-08-23 13:40:42 · 314 阅读 · 0 评论 -
C语言宏定义技巧
1,防止一个头文件被重复包含#ifndef COMDEF_H#define COMDEF_H //头文件内容#endif 2,重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植typedef unsigned cha原创 2011-08-23 13:46:58 · 239 阅读 · 0 评论 -
C语言中几种与零值的比较
1.bool变量与“零值”进行比较 bool变量与“零值”进行比较的if语句bool bTestFlag = FALSE;if(bTestFlag) 或者 if(!bTestFlag)2.float变量与“零值”进行比较float fTestVal=原创 2011-08-23 13:48:51 · 593 阅读 · 0 评论 -
break和continue的区别
break和continue的区别如下:1. break可用于switch语句,表示跳出整个switch块,而continue则不能用于switch语句2. 它们都可用于循环语句的循环体,所谓的区别也应该是它们对循环次数的影响不同。break用于立即退出当前循环,原创 2011-08-23 13:50:31 · 288 阅读 · 0 评论 -
C语言中的\n与\r
\r 回车(跑到最前面)\n 换行(下一行)本来只有\r\n组合起来才算真正换行不过现在 \r\n \r \n 三种写法似乎都可以被兼容!在C语言中回车\r还是回到当前行的开头却不向下移一行。换行\n却光标下移一行并且移原创 2011-08-23 13:51:15 · 710 阅读 · 0 评论 -
C语言中带负数的除法
首先先说余数,在C语言中余数的符号是和被除数的符号相同。即: (-10)%3==-1; 10%(-3)==1; (-10)%(-3)==-1;做除法的时候,商是令其与分子相乘的积的绝对值不超过分母的绝对值且最接近的那个数,所以原创 2011-08-23 13:53:24 · 7244 阅读 · 2 评论 -
strncpy()、 strcpy()、 strcmp 、strdup、 strlen函数的实现
1.strncpy() 函数的实现 man查询的:char *strncpy(char *dest,char *src,int n) { int i; for(i=0;i dest[i] = src[i];原创 2011-08-23 13:56:42 · 410 阅读 · 0 评论 -
1.struct与class区别 以及3种交换变量
1. struct与class区别struct关键字和class关键字一般可以通用,只有一个很小的区别:struct成员默认情况下的属性是public,而class成员的却是private 2.3种交换变量 交换变量三种表示方法(a,b的值交换)t原创 2011-08-23 13:57:24 · 409 阅读 · 0 评论 -
变量的内存分配情况
内存中变量:全局变量、局部变量、静态变量(static)和寄存器变量(register) 局部变量和全局变量分配的内存地址差十万八千里,而全局变量和静态变量分配的内存是连续的。这是因为局部变量和全局变量/静态变量是分配在不同类型的内存区域中的结果。 一个原创 2011-08-26 14:46:30 · 585 阅读 · 0 评论