一、什么是指针
指针也叫内存地址。
二、指针的格式
三、指针的作用
*是一个表示指针的符号,通过内存地址获取数据的意思。
前面的*是一个标记,后面的*是查询地址。
// 利用指针去获取变量中的数据 / 存储数据
int a = 10;
//1.定义一个指针去指向变量a
int* p = &a;
//2.利用指针去获取变量中的数据
printf("%d\n", *p);
//3.利用指针去获取变量中的数据
*p = 200;
//4.输出打印
printf("%d\n", *p);
printf("%d\n", a);
return 0;
}
//结果:
10
200
200
四、指针的使用细节
1)指针变量的名字
2)指针变量的数据类型要跟指向变量的类型保持一致
3)指针变量占用的大小,跟数据类型无关,跟编译器有关
4)给指针变量赋值的时候,不能把一个数值赋值给指针变量(如果赋值,它就把这个值当作是真实的内存地址了。)
定义一个指针变量、把变量地址赋值给指针、访问指针变量中可用地址的值。
#include <stdio.h>
int main ()
{
int var = 20; /* 实际变量的声明 */
int *ip; /* 指针变量的声明 */
ip = &var; /* 在指针变量中存储 var 的地址 */
printf("var 变量的地址: %p\n", &var );
/* 在指针变量中存储的地址 */
printf("ip 变量存储的地址: %p\n", ip );
/* 使用指针访问值 */
printf("*ip 变量的值: %d\n", *ip );
return 0;
}
会运行以下结果:
var 变量的地址: 0x7ffeeef168d8
ip 变量存储的地址: 0x7ffeeef168d8
*ip 变量的值: 20
五、C 中的 NULL 指针
在变量声明的时候,如果没有确切的地址可以赋值,为指针变量赋一个 NULL 值是一个良好的编程习惯。赋为 NULL 值的指针被称为空指针。
#include <stdio.h>
int main ()
{
int *ptr = NULL;
printf("ptr 的地址是 %p\n", ptr );
return 0;
}
运行结果:
ptr 的地址是 0x0
1.在大多数的操作系统上,程序不允许访问地址为 0 的内存,因为该内存是操作系统保留的。然而,内存地址 0 有特别重要的意义,它表明该指针不指向一个可访问的内存位置。
但按照惯例,如果指针包含空值(零值),则假定它不指向任何东西。可以用if语句表示:
if(ptr) /* 如果 p 非空,则完成 */
if(!ptr) /* 如果 p 为空,则完成 */
2.遍历数组并比较指针:
#include <stdio.h>
int main() {
int arr[] = {10, 20, 30, 40, 50};
int *start = arr; // 指向数组的第一个元素
int *end = &arr[4]; // 指向数组的最后一个元素
int *ptr;
for (ptr = start; ptr <= end; ptr++) {
printf("当前指针指向的值: %d\n", *ptr);
}
return 0;
}
之前学过的遍历都知道,10,20,30,40,50会依次运行。
我自己也是没理解线性代数,然后看了黑马的C语言指针还看了点菜鸟教程,就有点理解单链表那些了,我明天继续更指针篇。
标签:变量,int,ip,C语言,地址,ptr,指针 From: https://blog.csdn.net/weixin_53473589/article/details/144518675