【C】指针、引用和数组

在大多数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语言的指针就是这么简单,其作用主要用来优雅地操作数据。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值