语言 笔记"/>
C语言 笔记
定义与声明最重要的区别:定义创建了对象并为这个对象分配了内存空间,声明没有分配内存空间。
register 关键字是尽可能的将变量放在CPU内部寄存器中,但不是绝对,由CPU确定。register 必须是一个单个的值,并且长度应小于等于整型长度的值,并且不能用&获取register变量的地址。
static 修饰变量
静态全局变量,作用域只限于被定义的文件中,其他文件不能使用该变量
静态局部变量,只能只本函数中可以使用,因为被static 修饰的变量总是在内存的静态区,即使这个函数运行结束,静态变量不会销毁,函数下次使用时仍然能使用这个值。
所有宏定义、枚举常数、只读变量全部使用大写字母命名,用下划线分割单词。
定义变量时,记得初始化。
unsigned int i;
for(i=9;i>=0;i--)
{
printf(“%d”,i);
}
结果会陷入死循环,因为i为无符号整数,i>=0恒成立。
char a[1000];
int i;
for(i=0;i<1000;i++)
{
a[i]=-1-i;
}
printf(“%d”,strlen(a));
因为char 类型本身的限制 范围为-128~127;并且-255的补码为0,所以输出的结果为255;
使用switch时,一定要写default语句
case 语句后面可以是 const修饰的变量
const定义的只读变量在程序运行过程中,只有一份拷贝,#define 定义的宏常量在内存中有若干个拷贝,宏定义在编译的时候确定值,const修饰的只读变量在编译的时候确定其值。
const修饰的变量在程序中不可更改。
const int *p;//p可变,p指向的对象不可变
int const *p;//p可变,p指向的对象不可变
int *const p;//p不可变,p指向的对象可变
const int *const p;//指针p和p指向的对象都不可变
先忽略类型名,const修饰哪个,哪个不可变。
const 修饰函数参数,当不希望这个参数值被函数体内意外改变时使用。
const修饰函数返回值,返回值不可改变。
volatile 和 const 并不矛盾,控制的范围不一样,volatile在程序之外,可能异想不到的改变,const在程序本身不能改变。
一个 int * 类型的模子在内存上咔出了4个字节的空间,然后把这个4个字节大小的空间命名为p,同时限定这4个字节的空间里面只能存储某个内存空间,即使你存入别的任何数据,都将被当作地址处理,而且这个内存地址开始的连续4个字节只能存储某个int类型的数据。
在32位系统下,不管什么样的指针类型,其大小都为4byte.
在内存地址0x12ff7c上写数据:
int *p=(int *)0x12ff7c;
*p=0x100;
或者 *(int *)0x12ff7c=0x100;
指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定。它是“储存指针的数组”的简称。
数组指针:首先它是一个指针,他指向一个数组。在32为系统下永远是4个字节,至于它指向的数组占多少字节,不知道。它是“指向数组的指针”的简称。
指针*p
p为指向变量的地址
*p为指向变量的值
&p为指针的地址(切记指针也是有值的)
更多推荐
C语言 笔记
发布评论