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;
}
相关推荐
一颗星星辰35 分钟前
C语言 | 第十章 | 函数 作用域
c语言·开发语言
꧁༺❀氯ྀൢ躅ྀൢ❀༻꧂42 分钟前
实验4 循环结构
c语言·算法·基础题
从0至11 小时前
力扣刷题 | 两数之和
c语言·开发语言
小比卡丘2 小时前
C语言进阶版第17课—自定义类型:联合和枚举
android·java·c语言
一个不知名程序员www2 小时前
leetcode第189题:轮转数组(C语言版)
c语言·leetcode
冷白白2 小时前
【C++】C++对象初探及友元
c语言·开发语言·c++·算法
睡觉然后上课2 小时前
c基础面试题
c语言·开发语言·c++·面试
武昌库里写JAVA3 小时前
【Java】Java面试题笔试
c语言·开发语言·数据结构·算法·二维数组
aaasssdddd966 小时前
python和c
c语言·开发语言·python
凯子坚持 c7 小时前
C语言复习概要(三)
c语言·开发语言