对C语言指针的补充!!

基础知识

*  :取值操作符

& :取地址操作符

如:

int i=2000;

int *pionter;

pointer=&i;

printf("%d\n",*pointer);

指针变量和指针

知道一个变量的地址,就可以通过这个地址来访问这个变量,因此又把这个变量的地址称为该变量的“指针”,C语言中可以定义一类特殊的变量,这类变量专门用来存放变量的地址,称为指针变量。

注意:指针变量的值,即指针变量中存放的值是地址(指针),请区分指针和指针变量这两个概念

指针变量的值是它所存储的内存地址,而不是另一个指针的指针。当我们谈论一个指针变量时,我们指的是一个能够存储内存地址的变量。例如,如果有一个整型指针变量  int *ptr; ,它可以存储一个整数变量的地址。当我们说  ptr  的值时,我们指的是它所存储的那个具体的内存地址。如果有另一个指针变量  int **pptr; ,并且我们将  ptr  的地址赋值给  pptr ,即  pptr = &ptr; ,那么  pptr  的值就是  ptr  指针变量的地址,它是一个二级指针。在这种情况下, pptr  指向  ptr ,而不是  ptr  所指向的整数变量。总结来说,指针变量的值是它所存储的内存地址,而不是另一个指针的指针。只有当我们有意创建一个指向指针的指针时(即二级指针或更高阶别的指针),它的值才会是另一个指针的地址。

以上大致是我个人的理解。

在我们定义指针变量时,需要注意     float    *pionter;//指针变量名是pionter,不是*pionter

输入两个数,按先大后小的顺序输出a和b。
实现对两个数的交换

利用指针实现三个数的排序

利用指针使指定的数倒序输出

这类题的根本思想就是用后面的数替换前面的数

如果大家不太理解指针之间是如何通过地址来进行赋值的,我会给出两个例子来供大家参考。

这是数组之间的赋值大家可以参考一下

利用指针使数组元素从大到小输出

指针与二维数组

字符串与指针

字符串与与指针一般是用数组的形式来进行各种的操作,因为通过指针无法操作单个的字符,只能通过指针读取一个一个字符从而能够形成字符串,从而进行各种操作。

字符串中字符存取方法

字符指针作函数参数

以下两幅图实现的功能一样,还有一些其他的办法实现,我就不一一列举了,算法思想都一样

对于对字符数组赋值

错误典例:

char str[20];

str="haskuhkajsdh!";

正确做法:

char *a;

a="ahsbdajksdbka!";

对字符指针变量赋初值

char *a="ascasasca";

等价于

char *a;

a="ascascacasa";


如果定义了一个字符数组,在编译时为它分配内存单元,它有确定的地址。而定义一个字符指针时,给指针变量分配内存单元,在其中可以放一个字符变量的地址也就是说,该指针变量可以指向一个字符型数据,但如果未对它赋予一个地址值,则它并未具体指向一个确定的字符数据。

.指针变量的值是可以改变的,如:改变指针变量的值:
Void main()
char *a = "dfbdfdfdfbd”

a+=7;
printf("%s\n".a);

小结

关于const

void *p;
表示指针变量p不指向一个确定的类型数据,它的作用仅仅是用来存放一个地址。Void指针它可以指向任何类型数据,也就是说,可以用任何类型的指针直接给void指针赋值,但是,如果需要将void指针的值赋给其他类型的指针,则需要进行强制类型转化

CONST指针基础知识
在C语言中, const 关键字用于修饰指针,以控制指针指向的数据是否可以被修改。 const 修饰指针可以有以下几种情况:
常量指针:指针本身的值(即地址)可以改变,但指针指向的数据不可以修改。例如  const int *p = &a;  这里  p  可以指向另一个整数,但不能通过  p  来修改  a  的值。
指针常量:指针本身的值(即地址)不可以改变,但指针指向的数据可以修改。例如  int * const p = &a;  这里  p  必须始终指向  a ,但可以修改  a  的值。
同时是常量指针和指针常量:指针本身的值和指针指向的数据都不可以修改。例如  const int * const p = &a;  这里  p  不能改变,且通过  p  也不能修改  a  的值。
如何使用CONST指针
在编写代码时,使用  const 修饰指针可以增加程序的健壮性,防止无意中修改重要的数据。例如,当传递数组到函数时,可以使用  const 指针来确保函数不会修改传入的数组内容。

void printArray(const int *arr, int size) {
    for (int i = 0; i < size; ++i) {
        prin[i]);
    }
}
 
在上述函数中, arr  是一个指向  const int  的指针,这意味着函数内部不能通过  arr  修改数组的内容。
注意事项
当  const 修饰指针时,应注意其位置。 const 放在星号  *  之前表示常量指针,放在星号之后表示指针常量。
使用  const 修饰指针时,编译器会提供额外的检查,以防止非法修改操作。
在处理  const 指针时,应该小心使用解引用操作符  * ,因为尝试修改  const 数据可能导致编译错误。
 

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值