一.了解指针
int 表示4个字节
short表示2个字节
char表示1个字节
一个字节8bit
例如int a =0x12345678
将数据存入四个字节
short d[] = {0x5A6B, 0x5A6B};
int* p //指向int型数据的指针变量(p是变量)
p = &a //将a的首地址给p,&表示取地址
*p //取出指针指向的数据单元
&也可以认为是开阔了一块地址
p根据电脑的位数可得这是占8个字节
a的地址也是8个字节
&的含义即把a的内存地址放入p的内存中(地址都是8个字节的)
*p即根据p的值找到这个地址取出该地址的值
二.指针的加减
因为int 占四个字节
所以p++后地址往后移四个字节
char 占一个字节,所以加的时候就往后一个字节
三.指针的应用
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;
}
用了指针就极大的节省了内存空间
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;
}
*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]);
}
这样就可以返回多返回值
Time得要是全局变量
以上就是我目前学习的指针的内容了