栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

加入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("%dn" , *(int *)p);  //使用正确的解析方法来解析内存可以得到正确的值

printf("%dn" , *(char *)p);  //使用错误的解析方法来解析内存可以得到错误打值
5、const 型指针

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

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

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

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

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

// *p = 200; //错误,p是一个常目标指针,不可以通过该指针来修改他所指向打内容
printf("%dn" , *p);
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/665420.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号