1. 内存和指针
边界对齐 :整型值存储的起始位置只能是某些特定的字节,通常是 2 的倍数
变量名字和内存位置之间的关联并不是硬件所提供的,它是由编译器实现的
硬件通过地址访问内存位置
2. 值和类型
不能简单的通过检查一个值的位来判断它的类型,而是值的使用方式
3. 指针
NULL指针
char ch = 'a';
char *cp = &ch;
*cp + 1
:
b
*(cp +1)
:
a 的相邻内存单元的值
cp++
:
a 的相邻内存单元的地址
++cp
:
a 的地址
*++cp
:
a 的相邻内存单元的值
*cp++
:
a (产生cp的拷贝;cp增加;通过cp拷贝执行间接访问)
++*cp
:
b,
ch = 'a';
(*cp)++
:
a,
ch = 'b';
++*++cp
:
a 的相邻内存单元的值+1
++*cp++
:
b
实例
int
strlen( char *string )
{
int length = 0;
while( *string++ != '\0' )
length += 1;
return length;
}
int
find_char( char **strings, char value)
{
char *string;
while( ( string = *strings++ ) != NULL )
{
while( *string != '\0' )
{
if( *string++ == value )
{
return 1;
}
}
}
return 0;
}