C语言的指针

目录

1.指针的概念

2.指针变量的定义方法

3.指针大小

4. 指针的分类


从0开始记录我的学习历程,我会尽我所能,写出最最大白话的文章,希望能够帮到你,谢谢。


提示:文章作者为初学者,有问题请评论指正,感谢。

1.指针的概念

首先,我们可以把指针想象成一个箭头,它指向了内存中的某个位置。这个位置可以存储数据,比如整数、字符、甚至其他指针。指针的作用就是帮助我们找到这些数据。

2.指针变量的定义方法

1.简单的指针变量

数据类型 *    指针变量名;

int * p;//定义了一个指针变量 p

  • 在 定义指针变量的时候 *  是用来修饰变量的,说明变量 p 是个指针变量。
  • 变量名是 p

2.关于指针的运算符

  • & 运算符(取地址)

    • & 运算符用于获取变量的内存地址。
    • 例如,如果我们有一个整数变量 x,那么 &x 就表示变量 x 在内存中的地址。
    • 这个地址可以被存储在指针变量中,以便后续访问。
  • * 运算符(取值)

    • * 运算符用于解引用指针,获取指针所指向的数据。
    • 如果我们有一个指针变量 p,那么 *p 就表示获取指针 p 所指向的数据。
    • 例如,如果 p 指向整数变量 x,那么 *p 就是获取 x 的值。
int a =0x1234abcd;
int *p;//在定义指针变量的时候*代表修饰的意思,修饰 p 是个指针变量 
p =&a;//把 a 的地址给 p 赋值,&是取地址符,

 p  保存了 a 的地址,也可以说 p 指向了 a

p 和 a 的关系分析a 的值是 0x1234abcd 假如 a 的地址是:0xbf e8 98 68

分析:

  1. 1 、在调用的时候 *代表取值得意思 *p 就相当于 p 指向的变量,即 a
  2. 2 、故 num=*p    num =a   的效果是一样的。
  3. 3 、所以说 num 的值为 0x1234abcd

拓展 :如果在一行中定义多个指针变量,每个指针变量前面都需要加*来修饰

  • int *p,*q;//定义了两个整型的指针变量 p  q
  • int * p,q;//定义了一个整型指针变量 p ,和整型的变量 q

我们再看一下一个例子

int main(){
int a = 100, b = 200;
int *p_1,*p_2=&b;//表示该变量的类型是一个指针变量,
//指针变量名是 p_1 而不是*p_1. p_1 在定义的时候没有赋初值, p_2 赋了初值
p_1= &a;//p_1 先定义后赋值
printf("%d\n", b);
printf("%d\n",*p_2); 
return 0;}

 注意:

在定义 p_ 1 的时候,因为是个局部变量,局部变量没有赋初值,它的值是随机的,p_ 1 指向哪里不一定, 所以 p_ 1 就是个野指针。(野指针是指一个指针变量,它存储了一个无效的内存地址

3.指针大小

 32 位系统下 ,所有类型的指针都是 4 个字节 ,无论是字符指针还是数组指针还是啥啥啥指针,它们在内存中的大小都是一样的。听懂掌声。

4. 指针的分类

1:字符指针

字符型数据的地址

char    *p;//定义了一个字符指针变量,只能存放字符型数据的地址编号

char ch; p= &ch;

2 :短整型指针

short int *p;//定义了一个短整型的指针变量 p ,只能存放短整型变量的地址

short int a; p =&a;

3 整型指针

int *p;//定义了一个整型的指针变量 p ,只能存放整型变量的地址 int a;

p =&a;

注:多字节变量, 占多个存储单元,每个存储单元都有地址编号,

c 语言规定,存储单元编号最小的那个编号,是多字节变量的地址编号。

 4 长整型指针

long int *p;//定义了一个长整型的指针变量 p ,只能存放长整型变量的地址 long int a;

p =&a;

5 float  型的指针

float *p;//定义了一个 float 型的指针变量 p ,只能存放 float 型变量的地址

float a; p =&a;

6 double 型的指针

double *p;//定义了一个 double 型的指针变量 p ,只能存放 double 型变量的地址 double a;

p =&a;  

7:函数指针

函数指针就像是一个指向函数的箭头。

它可以让我们在程序运行时,根据需要调用不同的函数。

比如,我们可以把函数的地址存储在函数指针中,然后通过这个指针来调用函数。

8:结构体指针

结构体是一种自定义的数据类型,可以包含多个不同类型的数据。

结构体指针就是指向结构体的箭头。

它可以让我们方便地访问结构体中的成员变量。

9:指针的指针

指针的指针就像是一个指向指针的箭头。

它可以让我们间接地访问指针所指向的数据。

比如,我们可以有一个指向整数指针的指针,然后通过它来获取整数的值。

10:数组指针

数组指针是指向数组的箭头。

它可以让我们方便地处理数组中的数据。

比如,我们可以用数组指针来遍历数组的元素。

11:通用指针 void*

void* 是一种特殊的指针,它可以指向任何类型的数据。

但是,我们不能直接访问它所指向的数据,需要先转换成具体的类型。

总结

今天就简单的讲解了一下指针最最浅显的东西,感觉全是废话。但是指针又太多了,打算一点一点的慢慢写。加油喽未来优秀的嵌入式工程师嘿嘿嘿。

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值