基础知识
* :取值操作符
& :取地址操作符
如:
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 数据可能导致编译错误。