C-指针1

C语言是一门很强大的语言,他可以直接操作内存,指针就是他可以操作内存的一种方法。

指针是指对象对应的内存地址,读写指针就等于读写内存。

&操作符,又称为取址操作符,将&放在对象名前面,可以获取该对象的内存地址。

数组事实上就是一个指针,他具有长度属性,事实上,随便的一个数的指针也是数组,长度为1而已。指向数组的指针做加减法时,+i等于指针后移i个元素,-i等于前移i个元素,若是超出了数组的长度,称为出界,会导致未知错误,因为被出界的指针很有可能指向的是一个有什么用的变量,不知不觉给人家改了,当然有可能出问题了。有时候,运行良好的程序不一定就没有毛病,只是没爆发而已,养成良好的代码习惯,可以少犯奇奇怪怪的错误。

指针作为普通函数参数使用时,不需要长度,而作为数组参数使用时,需要定义长度。使用指针作为参数与传递给函数,效率会更高,而且不用受限于函数只能return一个结果,可以使用指针传递好几个结果出来。

写一个求数组中最大值最小值的函数如下:

void _max_min(int *p, int len, int *pmax, int *pmin) {
int _max = p[0], _min = p[0];
for(int i = 1; i<len; i++) {
if(p[i]>_max) {
_max = p[i];
}
if(p[i]<_min) {
_min = p[i];
}
}
*pmax = _max;
*pmin = _min;
}

int main()
{
int arr[4] = { 1,2,3,4 };
int _arr_max = 0,_arr_min = 0;
_max_min(arr, 4, &_arr_max, &_arr_min); //此处结果借由指针参数传递出来,得到两个结果
printf_s(“max is %d \n min is %d \n”,_arr_max,_arr_min);
return 0;
}

指针可以传递多个参数出来,是因为指针传递的是地址,不是值,函数运行时如果是传值,他会复制一份在进行运算,而传递指针就不需要复制,直接访问了指针所指向的地址,所以在值比较占内存的情况下,指针作为参数相对相率更高,而且不存在变量无法变更的情况。

发表评论

电子邮件地址不会被公开。 必填项已用*标注