指针的学习

一.了解指针

int 表示4个字节

short表示2个字节

char表示1个字节

一个字节8bit

例如int a =0x12345678

将数据存入四个字节

e39dfec77a5042dca1f2504e3f2f39cd.png

036b0d9d7d2f4f2e8033ae082bd5bb03.png

short d[] = {0x5A6B, 0x5A6B};

46445fa95bb044cd832646bc5cc8f0ed.png

int* p //指向int型数据的指针变量(p是变量)

p = &a  //将a的首地址给p,&表示取地址

*p //取出指针指向的数据单元

&也可以认为是开阔了一块地址 

85fb4529dbd6473e8aa41da190e00596.png

 p根据电脑的位数可得这是占8个字节

0c2b43d4a55c4efaa67ca3f4de9eaca3.png

 a的地址也是8个字节

ca868ebce13d44808de3984481c90565.png

 fd416b18561340efb540318e185d23af.jpeg&的含义即把a的内存地址放入p的内存中(地址都是8个字节的)

*p即根据p的值找到这个地址取出该地址的值

二.指针的加减

19a3d686123541218466b7f3b6550560.png

因为int 占四个字节

所以p++后地址往后移四个字节

92f9bacaf3864551aeaf6bb731811861.png

char 占一个字节,所以加的时候就往后一个字节 

三.指针的应用

7c85794ecad7406fa2ada83b6dc8bcc1.png

44d21b433b6d4d54a5634b3b046f1553.jpeg

int FindMax(int *array,int Count)
{
    int i;
    int max=array[0];
    for(i=1;i<Count;i++)
    if(array[i]>max)
    max=array[i];
    return max;
}
int main(void)
{
    int a[]={13,2,3,5,4,30};
    int Max;
    Max = FindMax(a,6);
    printf("Max = %d\n",Max);
    return 0;
}

da1fccf7b8e148889365ded39b7b53f0.jpeg

 用了指针就极大的节省了内存空间

2.返回多返回值

#include <stdio.h> 

void FindMaxAndCount(int *max,int *count,int *array,int length)
{
	int i;
	*max = array[0];
	*count = 1;
	for(i=0;i<length;i++)	
	{
		if(array[i] > *max)
		{
			*max = array[i];
			*count = 1;
		}
		else if(array[i] == *max)
		{
			(*count) ++;
		}
	}
	
}

int main(void)
{
	int a[]={33,3,4,5,66,66};
	int Max,Count;
	FindMaxAndCount(&Max,&Count,a,6);
	printf("%d\n",Max);
	printf("%d\n",Count);
	return 0;
}

6071f77403f24352a7dd063e7182d485.png

d04285c06a26406f9cf33cc2830079ea.jpeg*max值改变就是改变Max的值,当FindMaxAndCount函数调用完,max的内存就消失了

#include <stdio.h> 

int Time[]={23,55,59};

int *GetTime(void)
{
	return Time;
}

int main(void)
{
	int *pt;
	
	pt = GetTime();
	
	printf("%d\n",pt[0]);
	printf("%d\n",pt[1]);
	printf("%d\n",pt[2]);
}


1db3a89120a3478c929dbc0ce3bd9344.png

这样就可以返回多返回值

Time得要是全局变量 

以上就是我目前学习的指针的内容了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值