笔记原在个人印象笔记,现在整理搬运。
一、基本数据类型
1.数组的坑
int a[] = { 1, 2, 3, 4 };
printf( "a is %d,&a is %d,a+1 is %d,&a+1 is %d\n" , a, &a, a + 1, &a + 1);
//这里a 与 &a值是一样的,都是4127200
//a 代表数组的首元素地址
//&a 代表整个数组的地址
2.typedef的使用(这种用法C++会改变)
struct Teacher
{
}Teacher
//C语言中,要使用必须要struct Teacher,这么搞就不用了。
typedef struct Teacher
{
}Teacher;
Teacher t;
3.void*可以指向任何地址
void a; //错误,不知道如何分配内存
void *p = malloc(10);//可以但比较危险。
4.字面量
for(i=0;i<10;i++)
10就是字面量。
二、变量本质与空指针常量
变量:一段连续内存空间的别名,是一个门牌号,就没有变量名。
1.修改内存方法
/*直接修改:*/
int a; //申请一块内存,地址12451234(编的)
//我们用a来代表。
a=10; //将地址12451234内存中放入10这个数
操纵a仅仅是告诉编译器,操纵12451234这个空间。运行时就没有a这个标号了。
/*间接修改:*/
int* p; //申请一块内存,地址11111111(编的)
p = 0x12451234;
//将地址11111111内存中放入12451234这个数
*p = 100;
//1.将地址11111111内存中的数(12451234)取出
//2.将取出的12451234转换成内存地址
//3.在上面那个内存地址中放入100这个数
2.空指针常量(C与C++不同)
0、0L、'\0'、3 - 3、0 * 17 (它们都是“integer constant expression”)以及 (void*)0 (我觉得(void*)0应该算是一个空指针吧,更恰当一点)等都是空指针常量(注意 (char*) 0 不叫空指针常量,只是一个空指针值)。至于系统选取哪种形式作为空指针常量使用,则是实现相关的。
一般的 C 系统选择 (void*)0 或者 0 的居多(也有个别的选择 0L);至于 C++ 系统,由于存在严格的类型转化的要求,void* 不能象 C 中那样自由转换为其它指针类型,所以通常选 0 作为空指针常量(C++标准推荐),而不选择 (void*)0