知识点7.C语言指针的总结归纳 -

关于指针的总结归纳

1.指针的含义:指针即是地址

2.指针的定义:
`变量类型 变量名

int   		a  

函数类型 函数名

int       a();

数组类型 数组名

int         a[];

类比可得 指针类型 指针变量名

         int  *   a;    

指针赋值方法:
一,取地址符赋值

int   a;
int   *p=&a;

二.数组名赋值;数组名即数组元素首地址

int  a[10];
int   *p=a;    //等效于 int  *p=&a[0];

三.指针之间可以相互赋值
3.指针的四要素:
3.1指针类型
3.2指针的值:指针在使用前必须给赋值,否则为野指针,不能被调用
3.3指针指向地址里的值的类型 :指针变量的类型要与指向地址里的值类型
3.4指针变量自身占内存空间; 32位系统占4字节,64位占8字节

4.指针的典型案例
例子一

#define uchar  unsigned char
uchar a,b,c,d,e,f,g,x,y,z;
              40H  41H 42H 43H 44H 45H 46H  47H  48H
uchar niu[10]={3,  7,  9,  21, 28, 34, 100, 200, 250};
uchar *sp;    
sp=niu;    //指针指向数组首地址40H,其等效于 sp=&niu[0];
a=*sp;   //3  *sp代表sp指向的地址40H的值  sp=40H,*sp=3
b=*sp+1; //4  *sp=3;  b=*sp  +1 =4
c=*sp++;  //3  等效于*(sp++),++在后是先执行完这串代码再加加。
//*sp=40H;后指向改变指向指向41H,sp=sp+1=41H;
d=*sp;    // 7   指向41H,*sp为41H地址里的值
e=*(sp++);  //  7  括号优先级最高,但是指多目运算单目运算不受影响,和e=*sp++等价
              a+3*5  (a+3)*5  (a)+(3)*5   e=7然后sp=sp+1 sp指向42H
f=*(sp+1);  // 21 sp指向的是42H,sp+1为43H,*(sp+1)是指向43H地址的值21
g=*sp;   //9  上一步代码指向没有变化,为42H,
x=*(sp+sizeof(sp));  //sp为指针。一般系统为4位,sizeof为4,x=*(sp+4),
									//sp指向还是42H,
y=*(sp-sizeof(*sp));  //*sp是指的是指向地址的值,sizeof的值为uchar大小
//sp指针指向也没变

5.指针数组
int niu[10]; int数组niu的类型 ,niu数组名,又是数组首地址
niu[0];数组niu首地址里面的数,niu[0]数组元素
int *a[10];//int * 指针数组a变量名的类型
a[0]; *a[0];指针a[0]的 uchar *sp;
sp指针变量名 uchar * 指针类型
指针数组的定义格式
类型标识 *数组名[整型常量表达式];
例如: int *a[10]; 指针数组和一般数组一样,
允许指针数组在定义时初始化。
指针数组的每个元素是指针变量, 它只能存放地址。
所以对指向字符串的指针数组在说明赋初值时,
是把存放字符串的首地址赋给指针数组的对应元素。
uchar *sp[10];
uchar niu[]=“edu118”;
sp[0]=niu;
*sp[0]=niu;

6.指针函数

指针函数是指带指针的函数,即本质是一个函数,函数返回类型是某一类型的指针。
类型标识符 *函数名(参数表)
int *f(x,y);
首先它是一个函数,只不过这个函数的返回值是一个地址值。函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有函数返回值,而且,在主调函数中,函数返回值必须赋给同类型的指针变量。
表示

float *fun();
float *p;
p = fun(a);

7.函数指针
函数指针是指指向函数的指针,根本是指针

#include <stdio.h>
void fun(char a,int b);
int main(void)
{
    void (*p)(char a,int b);
    p=fun;
    (*p)('c',90);  //显式调用
    p('b',80);   //隐式调用
    return 0;
}
void fun(char a,int b)
{
    printf("the argument is %c and %d\n",a,b);
}

显示调用和隐式调用区别略
函数指针的定义方法
函数返回参数 指针名 函数的形参,

 void         (*p)  (char a,int b);

注意函数指针定义是要与指向的函数类型一致,包括返回值,形参变量

8指针函数和函数指针结合有返回指向函数的指针

int (* fun(int))(int *,int)

分成两部分理解
int (*p)(int *,int)返回类型
和fun(int)函数
9.指针数组是数组元素为指针的数组(例如 int *p[3],定义了p[0],p[1],p[2]三个指针),其本质为数组。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值