C语言指针(二)知识点梳理

一、知识点梳理

  1. char *p="hello"; p=NULL; //不用时置为零,避免野指针
  2. 声明函数指针
int sum(int a,int b)
{
    return a+b;
}

int (* pfun)(int,int)=sum;  //函数指针声明
//函数返回值类型    (函数形参类型)

四种函数指针调用方法:
printf("%d\n",sum(1,2));
printf("%d\n",pfun(1,2));
printf("%d\n",(*sum)(1,2));
printf("%d\n",(*pfun)(1,2));

  1. 回调函数:下层函数调动上层函数
  2. 其它类型指针指向void *需要强制类型转换
    char (p1)[5] = (char ()[5])a; //把前边复制到后边括号中并把函数名删去
    5.int **p; //二级指针
    (1)用于指向一级指针`
int a=10;
int *q=&a;
p=&q;
//a=*q=**p
//&a==q==*p

(2)p可以指向对应的(类型相同)指针数组

int *b[20];
p=b;
// p+2   b[2]指向的int *的首地址
//*p+2   b[0]指向的数组的第三个元素的地址
//**p    b[0]指向的数组的第1个元素的值
  1. 若实参是一个指针变量p,传递给形参,则函数的内部无论怎么做,不会改变实参p的指向,形参可以通过改变地址来改变p所指向的内容。
  2. **的作用
    (1)改变一级指针的指向,若实参是一个一级指针的地址则形参是 **;
    (2)当实参为指针数组时,形参要用 **;
    ps: int *a[] ===int **a
  3. 打印main的命令行参数
#include<stdio.h>

int main(int argc,char **argv)
{
    int i;
    for(i=0;i<argc;i++){
            printf("%s ",argv[i]);
    }
    printf("\n");
    return 0;
}

//  gcc 1.c
//  ./a.out 参数一 参数二 ......

  1. const
const char *p;
char const *p;//两个等价,表示指针是只读指针,可以指向有效地址,可以读取,但无法通过指针修改内存
char *const p;//常量指针,一般需初始化,指向后无法指向其他地方,但可以通过指针变量修改内存
const char *const p;
char const *const p;//二者等价,只读常量指针,不能通过指针变量修改内存,不能指来指去

9.有关指针的总结
在这里插入图片描述

二、今日心得

学的东西越来越多,有点记不住了,十分容易混淆。而且知识点没有吃透,很多题换种提问方法就做不出来了,昨晚做的选择题有点儿惨不忍睹。这样差距只会越来越大,做一件事就要尽力做到最好,不能让努力白费。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值