首页 > 其他分享 >[C语言]指针篇

[C语言]指针篇

时间:2024-12-16 21:59:19浏览次数:5  
标签:变量 int ip C语言 地址 ptr 指针

一、什么是指针

指针也叫内存地址。

二、指针的格式

三、指针的作用

*是一个表示指针的符号,通过内存地址获取数据的意思。

前面的*是一个标记,后面的*是查询地址。

// 利用指针去获取变量中的数据 / 存储数据
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

相关文章

  • 练12:双指针
    欢迎大家订阅【蓝桥杯Python每日一练】专栏,开启你的Python数据结构与算法学习之旅!文章目录前言1同向扫描2反向扫描3同向扫描与反向扫描的对比4例题分析2.1回文判定2.2美丽的区间2.3挑选子串前言双指针是一种常用于数组和链表类问题中,指的是用两个指针......
  • 13_C语言 -指针
    预备知识内存地址字节:字节是内存的容量单位,英文名Byte,一个字节有8位,即1Byte=8bits地址:系统为了便于区分每一个字节而对它们逐一进行编号,称为内存地址,简称地址。inta=5;基地址单字节数据:对于单字节数据而言,其地址就是其字节编号。多字节数据:对于多字节数据而言,其地......
  • 实验6 C语言结构体、枚举应用编程
    一、实验目的 能正确定义结构体类型能正确定义结构体变量,会对其进行初始化,访问,赋值,输入或输出能正确定义结构体数组,会对其进行初始化,访问,赋值,输入或输出能正确定义结构体指针变量,会使用其间接访问结构体变量,结构体数组初步体验链表的创建,遍历及插入节点操作能综合应用结构......
  • 函数指针(详细讲解)
    C语言中的函数指针函数指针是指向函数的指针变量,可以通过它调用函数。函数指针在编程中可以用于实现回调函数、动态调用函数和减少代码冗余。函数指针的基本概念1.函数指针的定义函数指针是一个特殊类型的指针,它指向一个具有特定签名(返回值类型和参数类型)的函数。语法:......
  • 实验六 C语言结构体、枚举应用编程
    实验任务1task1.c1//P286例8.172//对教材示例代码作了微调,把输出学生信息单独编写成一个函数模块3//打印不及格学生信息、打印所有学生信息均调用该模块实现45#include<stdio.h>6#include<string.h>7#defineN3//运行程序输入测......
  • C语言知识点汇总 第三讲
    引言C语言是结构化的程序设计语言,这里的结构指的是顺序结构,循环结构,选择结构,C语言能实现这三种结构 1.if语句1.1 ifif(表达式)语句表达式成立(为真),则语句执行,表达式不成立(为假),则语句不执行在C语言中,0为假,非0为真例子:输入一个整数,判断是否为奇数#include<stdi......
  • C语言:选择排序
    前言本文就本人目前浅薄的知识水平浅谈个人理解,仅记录本人学习过程有何错误欢迎各位优秀开发者纠正一、选择排序是什么?选择排序(SelectionSort)是一种简单直观的排序算法。二、工作原理1.选择在未排序的序列里面找到最小或最大的元素2.交换将找到的元素与未排序的序列......
  • C语言之控制流关键字
    条件控制1.if...(elseif...) else...  用于条件判断,根据不同的条件执行不同的代码块,if、elseif、else后跟判断条件,之间则是根据不同条件需要执行的代码块2.switch... case...default  用于多路选择,根据表达式的值执行不同的代码块,switch后跟要判断的表达式,case后......
  • 王道考研408课程关键信息总结(初级阶段,C语言入门)
    3.整型进制转换3.1二进制、十进制、八进制、十六进制的定义及使用注意如下所示:整型进制转换的具体代码如下:#include<stdio.h>intmain(){inti=123;printf("i=%d\n",i);printf("%o\n",i);//八进制printf("%x\n",i);//十六进制return0;}3......
  • 指针运用!!!(要多回顾)
    1.指针和字符串知识点1——冒泡排序基本格式for(i=0;i<5-1;i++)   {      for(j=0;j<5-1-i;j++)      {比较大小,        交换顺序        }}知识点2:strcmp函数———用于比较字符串的ASCII大小知识点3:指针字符串数组的初始化......