c语言中的指针*p

一、什么是指针
定义一个变量,系统会为变量分配内存单元,内存单元的每一个字节有一个编号,这个编号就是地址,所以这个地址就指向该变量单元,地址形象化地称为“指针”,也就是说通过它可以找到以它为地址的内存单元。
二、指针变量

定义指针变量:

基类型    *变量名 
int *name     //整型
char *name    //字符型
double *name  //双精度浮点型
float *name   //单精度浮点型
...

如何存放进地址:

int i = 1000;
int * point;
point = &i;       //&取地址,把1000在的内存单元的地址给指针point

两种访问方式:
直接访问:直接按变量名进行的访问
间接访问:将变量i的地址存放在另一变量中,然后通过该变量来找到变量i的地址,从而访问i变量

注意
①一个变量的指针的含义包括两个方面,一是以存储单元编号表示的纯地址(如编号为2000的字节),一是它指向的存储单元的数据类型(如int,char,float等)

② * 指针运算符(或称“间接访问”运算符),*p代表指针变量p指向的对象

*p = 1;                  //赋值语句

指针变量还可以作为函数参数

这个函数进行了值的交换,无返回值,

#include<stdio.h>

void swap(int *p,int *q)
{
     int temp;
     temp = *p;
     *p = *q;
     * q = temp;
     printf("*p = %d *q = %d",*p,*q);
}


int main()
{
      int a = 10,b =20;
      int * p ,*q;
      p = &a;
      q = &b;
      swap(p,q);
}

三、通过指针引用数组


    int a[10] = {1,2,3,4,5,6,7,8,9,0};
    int *p;
    p = &a[0];                     //元素a[0]的地址赋给指针变量p               ①
    p = a;                         //a是数组名,因此可以表示数组元素的首地址     ②

所以①和②等价

引用数组元素的方法:
① 下标法:通过下标分别表示数组中的每一个元素,a[0],a[1],a[2],…
② 指针法:通过指向数组元素的指针找到所需的元素,(a+i),(p+i),

指向数组的指针的运算(p 为指向数组中一个元素的指针)
①加减一个整数:p + 1;p - 1;
p+1是指向同一个数组中的下一个元素,
②自加自减运算:p++;++p,–p,p–;
③两个指针之间的运算:p1 - p2(只有两个指针都指向同一个数组中的元素时才有意义)

四、通过指针引用字符串
字符串是存在字符数组中,就像这样

char array[20]= {"i love China"};
char *p = array;

也可以直接通过指针引用数组

char *p = {“i love China”};

二者是等价的,都用了数组,只是第二个相当于是一个没命名的数组。

五、指向函数的指针
如果想调用一个函数,除了可以通过函数名调用以外,还可以同过指向函数的指针变量来调用该函数。

int main()
{
   int max(int,int);
   int (*p)(int,int);
   int a,b,c;
   p = max;
   printf("请输入a和b:");
   scanf("%d %d",&a,&b);
   c = (*p)(a,b);
   printf("%d \n %d\n max = %d \n",a,b,c);
   return 0;
}
int max(int x,int y)
{
  int z;
  if(x>y)
  z=x;
  else
  z= y;
  return (z);
}

类型名 (*指针变量名)(函数参数表列)
六、返回指针值的函数
七、指针数组和多重指针

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值