Linux C 数组与指针

指针

一、指针的基本概念

      所谓指针是一个用来指示一个内存地址的计算机语言的变量或中央处理器中的寄存器。通俗地讲,在把一个变量所在的内存单位的地址保存在另外一个内存单元中,保存地址的这个内存单元成为指针。

例:

int i;
int *pi=&i;
char c;
char *pc=&c;

    这里的&是取地址运算符,&i表示取变量i的地址,int *pi=&i;表示定义一个指向int型的指针变量pi,并用i的地址来初始化pi;这里的*号是指针间接寻址运算符,*pi表示取指针pi所指向的变量的值,也称为Dereference操作,指针有时称为变量的引用,所以根据指针找到变量称为Dereference。指针之间可以相互赋值,也可以用一个指针初始化另一个指针。

二、指针类型的参数和返回值

       例:

    

#include "stdafx.h"

int *swap(int *px,int *py)
{
	int temp;
	temp=*px;
	*px=*py;
	*py=temp;
	return px;
}
int _tmain(int argc, _TCHAR* argv[])
{
	int i=10,j=20;
	int *p=swap(&i,&j);
	printf("now i=%d j=%d *p=%d\n",i,j,*p);
	getchar();
	return 0;
}

 

     通常函数的参数是单向值传递,即函数本身并不能改变实参的值,但是如果函数的参数是通过指针、引用或数组的方式进行传递的,那么就可以通过函数改变实参的值。

三、指向指针的指针与指针数组

       数组中的每个元素可以是基本类型,也可以复合类型,因此也可以是指针类型。

    例:

    

int *a[10];   这称为指针数组。

     例:打印命令参数

#include "stdafx.h"


int _tmain(int argc, _TCHAR* argv[])
{
	int i;
	for(i=0;i<argc;i++)
	{
		printf("argv[%d]=%s\n",i,argv[i]);
	}
	getchar();
	return 0;
}

    说明:第7~10行通过命令行给main函数传递参数时,所传递的参数的个数将存储到变量argc中,而相关的参数则存储到字符串数组argv[ ]中。

四、指向数组的指针与多维数组

    使用方法:

    

int a[10];
int (*pa)[10]=&a;

    说明:a是一个数组,在&a这个表达式中,数组名做左值,取整个数组的首地址赋给指针pa。

五、函数类型和函数指针类型

    在C语言中,函数也是一种类型,可以定义指向函数的指针。我们知道,指针变量的内存单元放一个地址值,而函数指针存放的就是函数的入口地址。

    例:函数指针

    

#include "stdafx.h"
void say_hello(const char *str)
{
	printf("Hello%s\n",str);
}
int main()
{
	void(*f)(const char *)=say_hello;
	f("Guys");
	getchar();
	return 0;

}

    说明:函数调用运算符()要求操作数是函数指针,所以f(“Guys”)是直接的写法,而say_hello("Guys")或(*f)("Guys")则是把函数类型自动转化成函数指针。然后做函数调用。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

思丰百年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值