1.指针初始化错误
指针的初始化:
int i=0;
int *p=&i; //ok
int *p=null; p=&i;//ok
int *p=null; *p=i;//error
反汇编*p=i这句话:
*p=i;
00F013AA mov eax,dword ptr [p]
00F013AD mov ecx,dword ptr [i]
00F013B0 mov dword ptr [eax],ecx
发现这句话先是取P的值到eax,在取i的值到ecx,然后将ecx的值赋值给地址为eax的地址处,显然是个赋值语句。此时P处值为0,将eax写入内存地址为0x0000的地方报出错误。 因此指针初始化时必须用p=&i这句赋值,或直接简写为int *p=&i;
2.引用符号编译错误
引用是C++里面才加上的 所以以下程序在.C文件中编译会报错,必须在.CPP文件中编译运行。
#include <iostream>
#include <stdio.h>
#include <string>
using namespace std;
void fun(char c[])
{ printf("%d\n" , sizeof(c)); }
void fun2(char &c)
{ printf("%d\n" , sizeof(c)); }
void fun3(char(&c)[9])
{ printf("%d\n" , sizeof(c));
cout<<c<<endl;}
int main()
{
char c[] = "12345678";
// char *c = "12345678";
printf("%d\n" , sizeof(c)); //9 元素个数包括\0
fun(c); //4 数组传递的首地址--指针
fun2(*(c+1)); //1 *(c+1)表示传递的一个字符
fun3(c); //9 对数组求sizeof
return 0;
}
注释:
sizeof返回类型为size_t,单位为字节
1.char类型sizeof为1
2. 对引用类型sizeof返回引用类型对象的内存大小,上面char &c为1个元素为1,但是char(&c)[9]为整个数组为9,
由于是c型字符串,所以还有一个\0。
3. 对指针做sizeof,得到4。但是要获得指针所指对象的大小必须对指针解引用。
4. 对数组做sizeof相当于对所以元素做sizeof后再相加。