AutoLeaders控制组—C语言指针学习笔记

一、指针

  1. 内存区的每一个字节有一个编号,这就是“地址”,它相当于旅馆中的房间号。在地址所标识的内存单元中存放数据,这相当于旅馆房间中居住的旅客。在这里,将地址称为指针

  2. 直接访问:直接按照变量名进行访问。

    间接访问:将变量i的地址存放在另一变量中,然后通过该变量找到变量i的地址,从而访问i变量。

  3. 如果有一个变量专门存放另一变量的地址,则称它为指针变量

  4. 指针是一个地址,而指针变量是存放地址的变量.

二、指针变量

1.使用指针变量

int a=10;		//定义整型变量
int *pointer;	//定义整型指针变量
pointer=&a;		//将变量a的地址赋给整型指针变量

2.引用指针变量

p=&a;				//将a的地址赋给指针变量p
printf("%d",*p);	//输出a的值
*p=1;				//将整数1赋给指针变量p指向的变量
pritnf("%p",p);		//输出指针变量p指向变量的地址

3.& 取地址运算符 * 取内容运算符

4.指针变量作为函数参数

例:交换两个变量的值

void swap(int *p1,int *p2){
	int temp;
	temp=*p1;
	*p1=*p2;
	*p2=temp;
}

三、通过指针引用数组

1.“p=a;”的作用是“把a数组的首元素的地址赋给指针变量p” 
2.两个指针相减,如p1-p2 (只有p1和p2都指向同一数组中的元素时才有意义)

3.引用数组元素的三种方法:

下标法,如a[i]形式
指针法,如*(a+i) 其中a是数组名
指针变量法,p是指向数组元素的指针变量,其初值p=a,通过*(p+i)访问

p[i]等价于*(p+i)

4.多维数组的地址

int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}};



四、指向函数的指针
  1. 函数名代表函数的起始地址

  2. 定义一个指向函数的指针变量:类型名 (* 指针变量名)(函数参数列表)>

int (*p)(int,int);	
p=max;		

比较三个数大小

#include <stdio.h>

int max(int x, int y)
{
    return x > y ? x : y;
}
 
int main(void)
{
    int (* p)(int, int) = & max; // &可以省略
    int a, b, c, d;
 
    printf("请输入三个数字:");
    scanf("%d %d %d", &a, &b, &c);
 
    /* 与直接调用函数等价,d = max(max(a, b), c) */
    d = p(p(a, b), c); 
 
    printf("最大的数字是: %d\n", d);
 
    return 0;
}
 五、返回指针值的函数
  1. 返回值为指针的函数声明

    数据类型 *函数名(参数列表)
    {
         函数体
    }

六、指针数组
  1. 指针数组:一个数组,其元素均为指针类型数据

    1. 定义指针数组:*类型名 数组名[数组长度]; 例如:int *p[4];
 七、动态内存分配

动态分配区域

int main()
{
	int *p = (int *)malloc(sizeof(int));
	*p = 100;
	free(p);
	p = NULL;
	return 0;
}

malloc函数作用是在内存的动态存储区中分配一个长度为size的连续空间
free函数作用是释放指针变量p所指向的动态空间,使这部分空间能重新被其他变量使用。p应是最近一次调用malloc函数时得到的函数返回值。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值