许久没用指针,很多东西都遗忘了,在学习C语言版的数据结构时,对于某些指针显得力不从心,不定期更新指针的操作。
一、野指针
int main() {
int *p1, *p2;
if (p1 == NULL) {
cout << "+++" <<endl;
}
}
实际上,这并没有能输出+++,这里只是随机分配一个地址,而并非NULL;
二、指针传参
指针传参确实可以从根本上对变量进行操作,但是关于内存分配上有一点不同。
#include <stdio.h>
void mall(int * p) {
p = (int* )malloc(sizeof(int));
}
int main()
{
int *p1 = NULL, *p2 = NULL;
p1 = (int *) malloc(sizeof(int ));
mall(p2);
if (p1 == NULL) {
printf("++++\n");
}
if (p2 == NULL) {
printf("----\n");
}
else {
printf("//\n");
}
return 0;
}
我们我们发现通过这种传参方式并不能给p2分配内存空间,这是因为,我们虽然将p2指针传到函数中实际上这个p2是一个形参变量,和我们传递一个int index(int a)的这个a一样,并没有从根本上将其改变所以并不能影响到p2,我们只是给p分配了一块空间。
正确的做法应该是:
void mall(int ** p) {
*p = (int* )malloc(sizeof(int));
}