在刚开始学C语言的时候,老师是这么教我的 :*是指针,**是指向指针的指针。int* p 的意思是p是一个指针,存放的内容是一个int类型……这些大概是书上对*的解释,最基本的例子是 int* p; *p = 1; 在输出*p会得到 1。我到现在还是感觉奇怪的很。
这里不想和细致的研究这些问题,只是想说说大概怎么使用*这个东西。其实在用C去解决一些算法问题的时候只要记住关于*的下面两个使用方法就足够了。
*与数组
动态一维数组
int* data = (int*) malloc (sizeof(int) * size); size是你想动态申请的数组元素个数。
动态二维数组
int** data = (int**) malloc(sizeof(int*) * row );//row是行数
for(int i = 0 ; i < col ;i++)
{
data[i] = (int*) malloc(sizeof(int) * col) //col是列数
}
方便记忆
1.读,int* 直接读成 int数组,int**则读成数组的数组 = 二维数组。
2.同,malloc前面的强制类型转换和前面相同
3.降级,sizeof里的参数永远比前面少一个*。(我现在写程序的时候确实是这么想的,不会去从什么地址之类的考虑)
*与&
我学习的时候是用一句话去记的,*(星)是按图索骥,&是取地址。
什么是按图索骥?图就是一个变量的地址,*的作用是根据一个地址去取值,大概的意思就像按图索骥。
&任何一个标识符,会得到程序为这个标识符分配的地址。