第一阶段10 C语言指针进阶

本文深入探讨了C语言的指针,包括char指针、多级指针、万能指针的拆解、void指针的使用限制以及const型指针的两种形式。通过实例解析了各种指针的特性和操作注意事项。
摘要由CSDN通过智能技术生成

加入CSDN是出于记录,希望有不足之处多加指正。

1、char 指针

字符指针

char * p = "helloworld" ;
以上写法“helloworld”被存放与常量区中,可以被访问,不可以被修改;(只读数据)

2、多级指针

int a = 100  ;
int * p = &a; //一级指针,P指向a的地址
int **p1 = &p; //二级指针,p1指向指针p的地址
int ***p2 = &p1; //三级指针, p2指向二级指针p1

在这里插入图片描述
运行结果:
在这里插入图片描述

3、万能指针的拆解方法:

任何的指针不管有多复杂,拆解的时候都是拆分成两部分

char * p1; //第一部分指针变量名 *p1 ,第二部分指针所指向指针的类型char
char ** p2; //第一部分 *p2 ,第二部分 char *
char (*p3)[3]; //第一部分 *p3,第二部分 char [3],指向数组的指针,数组指针
char (*p4)(int , float); //第一部分 *p4, char(int , float),,,

注意:
以上的p1,p2,p3,p4都是一个指针本质上没有任何区别。
以上指针的唯一不同点在于他们所指向打数据类型不同。

4、void 指针

概念:还没有明确指针所指向的时候可以使用 void 指针(通用类型指针)
注意:

  1. void 型指针不可以直接用来索引目标,必须再把它进行强制类型转换再索引,才能获得正确的目标数据。
  2. void型指针无法直接进行加减运算。

void 关键字修饰的三个作用:

  1. 修饰指针,表示该指针所指向的类型是未知的。
  2. 修饰参数列表,表示该函数不接受任何参数。
  3. 修饰返回值类型,表示该函数不会有任何返回值。
void function(void);

以下代码知识作为实验了解 void 型指针的使用,实际开发中不要使用

// malloc 向系统申请一片内存大小为 4 字节,并让 p 来指向该内存
void * p = malloc (4);

*(int *)p =  25536 ; //强制类型转换为 int *

printf("%d\n" , *(int *)p);  //使用正确的解析方法来解析内存可以得到正确的值

printf("%d\n" , *(char *)p);  //使用错误的解析方法来解析内存可以得到错误打值

5、const 型指针

用来修饰指针有两种形式:
1.常指针
const 修饰的是指针本身,表示P不能被修改,只能指向原本所指向打内容。
但是可以通过该指针来修改他所指向的内存内容。

// 常指针
char * const p = "hello";
printf("%s\n", p);
p = "world"; //错误,p是一个常指针,不能够再初始化后再修改他的指向
printf("%s\n", p);
#include <stdio.h>
int main(int argc , char const *argv[])
{
    int n = 200;
    int m = 300;
    int *const p = &n;
    //p = &m         错的,不可以指其他地址
    *p = 400;   //   可以通过改指针修改它指向的内存内容
    printf("%d\n", *p);
    return 0;
}

2.常目标指针
比较常见,用来限制指针的读写权限,不可以通过该指针来修改他所指向打内存的内容,但是可以修改他的指向。

int a = 100;
int b = 998;
const int * p = &a;
printf("%d\n" , *p);

p = &b; //常目标指针可以修改他的指向但不能通过他来修改内存打内容

// *p = 200; //错误,p是一个常目标指针,不可以通过该指针来修改他所指向打内容
printf("%d\n" , *p);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值