6.13 c语言

十.指针

10.1 指针基本用法

程序简洁,紧凑,高效

有效的表达复杂的数据结构

动态分配内存

得到多余一个的函数返回值

计算机内存中,每一个字节单元都有一个编号,称为地址

编译或函数调用时为其分配内存单元

10.2 指针的概念

内存单元的地址称为指针,用来存放地址的变量。(地址==指针)

<数据类型> *<指针变量名>

指针变量是个变量

char *pname;

c 复制代码
#include <stdio.h>
#include<stdlib.h>
int main()
{
    int a = 10;
    int *pa;
    pa = &a;
    printf("a = %p pa = %p pa = %d %p\n",&a,pa,*pa,&pa);
    return 0;
}

10.3 指针的含义

指针指向的内存区域中的数据称为指针的目标

如果它指向的区域是程序的一个变量的内存空间,则这个变量称为指针的目标变量,简称为指针的目标

px,指针变量,它的内容是地址量

*px,指针所指向的对象,它的内容是数据

&px,指针变量占用的存储区域的地址,是一个常量

指针的赋值运算指的是通过赋值运算符指针变量送一个地址值

向一个指针变量赋值时,送的值必须是地址常量或指针变量

什么是指针?指针是内存单元的地址

指针有多少字节?8个

c 复制代码
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int a = 10;
    int *pa,*pb,*pc;
    int c[10];
    pa = &a;
    pb = pa;
    pc = &c[0];
    printf("a = %p\n pa = %p\n pb = %p\n pc = %p",&a,pa,pb,pc);
    return 0;
}

10.4 指针运算

指针运算是以指针变量所存放的地址量作为运算量而进行的运算

指针运算的实质就是地址的计算

指针运算的种类是有限的,它只能进行赋值运算、算数运算和关系运算。

两个指针相减运算

px-py运算的结果是两个指针指向的地址位置之间相隔数据的个数

两个指针相减的结果值不是地址量,而是一个整数值,表示两指针之间相隔数据的个数

c 复制代码
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int a[10] = {1,2,3,4,5};
    int *pa,*pb;
    pa = &a[3];
    printf("pa = %d\n",*pa);
    pb = pa++;
    printf("pa = %d pb = %d\n",*pa,*pb);
    pb = pa-2;
    printf("pa = %d pb = %d",*pa,*pb);
    return 0;
}
c 复制代码
#include <stdio.h>
#include<stdlib.h>
int main()
{
    int a[5] = {1,2,3,4,5};
    int *pa,*pb;
    pa = a;
    printf("pa =%d\n",*pa);
    pb = pa++;//pa先赋值给pb,再自增
    printf("pb = %d,pa = %d\n",*pb,*pa);
    return 0;
}
c 复制代码
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int a[] = {1,2,3,4,5};
    int *pa;
    pa = &a[2];
    pa++;
    printf("%d ",pa[1]);
    return 0;
}

10.5 指针和数组

数组的指针是指数组在内存中的起始地址,数组元素的地址是指数组元素在内存中的起始地址

一维数组的数组名为一维数组的指针

本质不同:指针变量是地址变量,数组的指针是地址常量//常量不能自增,a++ = a+1,a-- = a-1;

c 复制代码
#include <stdio.h>
#include<stdlib.h>
int main()
{
    int a[] = {1,2,3,4,5};
    int i,n,*p;
    p = a;
    n = sizeof(a)/sizeof(int);
    for(i=0;i<n;i++)
    {
        printf("%d %d %d %d\n",a[i],*(p+i),p[i],*(a+i));
    }
    return 0;
}

数组元素反序

c 复制代码
#include <stdio.h>
#include<stdlib.h>
int main()
{
    int a[] = {1,2,3,4,5};
    int *p1,*p2,n,i,t;
    n = sizeof(a)/sizeof(int);
    p1 = a;
    p2 = &a[n-1];//指针变量存放地址
    while(p1<p2)
    {
        t = *p1;
        *p1 = *p2;
        *p2 = t;
        p2--;
        p1++;
    }
    for(i=0;i<n;i++)
    {
        printf("%d",a[i]);
    }
    return 0;
}
相关推荐
来生硬件工程师38 分钟前
【STM32笔记】:P03 ISP 一键下载电路详解
c语言·笔记·stm32·嵌入式硬件·硬件工程·接口隔离原则·硬件设计
biter down2 小时前
c语言14:字符指针
c语言·开发语言
一念&4 小时前
每日一个C语言知识:C 字符串
c语言·开发语言
DuHz4 小时前
C程序中的数组与指针共生关系
linux·c语言·开发语言·嵌入式硬件·算法
来生硬件工程师4 小时前
【STM32笔记】:P04 断言的使用
c语言·笔记·stm32·单片机·嵌入式硬件·硬件架构·硬件设计
yuuki2332335 小时前
【C语言】文件操作(附源码与图片)
c语言·后端
秦.赢渠梁6 小时前
各种通信(三):GPS模块数据解析
c语言
量子炒饭大师8 小时前
收集飞花令碎片——C语言字符函数与字符串函数
c语言·开发语言
web安全工具库10 小时前
Makefile 模式规则精讲:从 %.o: %.c 到静态模式规则的终极自动化
linux·运维·c语言·开发语言·数据库·自动化
earthzhang202113 小时前
【1028】字符菱形
c语言·开发语言·数据结构·c++·算法·青少年编程