您的位置:首页 > 其它

【C】指针、引用和数组

2016-12-23 16:14 253 查看
在大多数C语言书籍中,指针和引用常常大篇幅介绍,然后一大堆示例程序,让人觉得不明所以。在编程中,自己也不敢乱用,害怕又搞出些野指针,空指针什么的。其实这部分,现在看来并不需要了解这么多东西。只要记住,C语言中,有一个可以存地址的变量类型,比如int *,就是存int地址的变量。至于引用&,一般很少用作变量类型的。&主要和*一样作为运算符的存在比较多。虽然术语不规范,但完全可以将&理解为取地址的运算符,*则是取该地址内容的运算符。

一个程序可以说明这点:

#include<stdio.h>
//17行对应的指针作为函数参数的使用示例
void change_element(int *p){//直接改变该地址所对应的内容为11
*p=11;//利用这方法,能解决函数需要有多个返回值的问题
}
int main(){
int int_element=999;//定义一个变量
int int_array[10]={1,2,3,4,5,6,7,8,9,10};//定义一个数组
int *pointer1,*pointer2;//定义两个存int地址的变量,也就是指针

pointer1=int_array;//数组名,实质上就是一个存着数组首元素地址的不可变指针const int*
//现将这个地址赋值给pointer1
printf("%d\n",*pointer1);//通过取内容符*,将pointer1这个地址所对应的内容读出来打印
pointer2=&int_element;//通过取地址符&,将int变量所对应的地址,赋值给pointer2
printf("%d\n",*pointer2);//通过取内容符*,将pointer2这个地址所对应的内容读出来打印

//指针作为函数参数的使用示例
change_element(pointer1);//此函数将直接改变数组首位置的内容
printf("%d\n",int_array[0]);
change_element(pointer2);//此函数将直接改变指针指向的内容
printf("%d\n",int_element);

return 0;
}运行结果如下:



大家需要厘清的一点,就是int *和*是没有任何关系的,int *是定义一个存int的地址的东西,*某个int *变量,则是取这个int *变量地址所对应的内容。

&某个int,能将这个int所对应的地址存到int *变量中。

而你定义了一个数组,实质上也定义了一个指向这个数组第0个运算的const int*变量,该const int*变量的名称就是你写的函数名。

C语言的指针就是这么简单,其作用主要用来优雅地操作数据。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: