1.1指针初探
指针:存储地址的变量称为指针
1.1.1指针初始化
指针类型最好初始化,使他不指向任何对象。否则很危险
type *pointer = NULL;
NULL 是一个不指向任何内存位置的值
1.1.2指向常量的指针
long value = 9999L;
const long *pvalue = &value;
1.1.3常量指针
int count = 3;
int *const pcount = &count;
1.1.4指针命名
最好以p开头命名
1.2指针
程序在执行期间分配的内存,该内存空间称为堆;
另一个称为堆栈,其中的空间分给函数的参数和本地变量;
int *pNumber = (int *)malloc(100);
pNumber = (int *)malloc(sizeof(int)*75);
pNumber = (int *)calloc(75,sizeof(int));//初始化为0
free(pNumber);
1.3指针和数组
一维数组名默认为首地址,可以算出一维数组的元素个数;
指针的占有内存永远是四个字节,地址所占内存为四个字节,不能算出一维数组的元素个数;
#include<iostream>
#include<string>
using namespace std;
int main()
{
int num[2][3]={{1,2,3},
{4,5,6}
};
int *p = &num[0][0];
int a[]={1, 2, 3, 4, 5};
int *q=a;
cout<<"sizeof(num)=" << sizeof(num) << endl;
cout<<"sizeof(num[0])=" << sizeof(num[0]) << endl;
cout<<"sizeof(p)=" << sizeof(p) << endl;
cout<<"sizeof(a)=" << sizeof(a) << endl;
cout<<"sizeof(q)=" << sizeof(q) << endl;
getchar();
getchar();
}
运行结果如下:
注意区分地址空间和类型存储空间
char c='c';
cout<<"sizeof(c)=" << sizeof(c) << endl; //sizeof(c)=1
cout<<"sizeof(&c)=" << sizeof(&c) << endl; //sizeof(&c)=4