C语言指针1

发布于:2025-04-18 ⋅ 阅读:(51) ⋅ 点赞:(0)

1.指针的两值四方面

 两值:自身的值、指向的值

 四方面:

        (1)指针的本质:地址

        (2)指针自身类型:int *ptr,  int*

        (3)指针指向类型:int *ptr, int

        (4)指针的大小:所占内存空间数,4字节或8字节

2.什么是地址

地址就是内存单元的编号

3.指针操作

(1)获取变量地址:对变量取地址,通过&符号

(2)指针本质:指针变量是保存指针的变量,而给p却赋值一个地址,从而推出,指针其实就是地址而已

//定义变量,本质是要开辟空间,只要开辟空间,就会有地址,而地址如何存储,就是使用指针变量
#include <stdio.h>
int main(){
    int a = 10;
    int *p = &a; //p是指针变量,保存了a的地址
    return 0
}

(3)指针大小

int main() {
    printf("%d\n", sizeof(char*));
    printf("%d\n", sizeof(short*));
    printf("%d\n", sizeof(int*));
    printf("%d\n", sizeof(float*));
    printf("%d\n", sizeof(double*));
    return 0;
}

输出:8 8 8 8 8

(4)指针的两值

 p指针变量保存了a的地址,我们就认为p指向了a

此时对于p来说,有两方面的值,一是p变量自身的值,二是*p所指向的值(也称解引用)

对*p赋值,就是修改指向的值,即修改a的值

对p赋值,比如p = &b,就是修改p指针变量自身空间的值,即让p不再指向a,而是指向b

4. 指针两值的验证  const

.c   const  只读变量

.cpp   c plus plus  c++  const  常量

 以下定义p是错误的,因为a被定义为常量,如果定义指针p指向a,那么意味着p可以实行对a的操作,这显然是不可行的

const int a = 10;
int* p = &a;

正确定义

const int a = 10;
const int* p = &a;  //语法要求
int a = 10;
const int* p = &a;  //语义要求

int main() {
    int a = 10;
    int b = 20;
    const int* p = &a;

    //*p = 100 //不可修改指向的值,但a可以改变值,此时p指向的值也改变
    p = &b;  //可以修改自身的值
    return 0;
}

int main() {
    int a = 10;
    int b = 20;
    int *const p = &a;

    //p = &b //不可修改自身的值
    *p = 100;  //可以修改指向的值
    return 0;
}

const是修饰*p(指向的值)为常量,还是p(自身的值)为常量,关键在于const是在*的左边还是右边

 5.指针的两类型

 自身类型

char *pc; //把名字pc去掉,剩下的char*就是pc指针变量自身的类型,即字符型指针类型

short *pc; //把名字pc去掉,剩下的short*就是pc指针变量自身的类型,即短整型指针类型

int *pc; //把名字pc去掉,剩下的int*就是pc指针变量自身的类型,即整型指针类型

double*pc; //把名字pc去掉,剩下的double*就是pc指针变量自身的类型,即浮点指针类型

注:当能定义出指针变量的时候,只需要把名字去掉,剩下的就是指针变量自身的类型

 指向类型

char *pc; //把名字pc和*去掉,剩下的char就是pc指针变量自身的类型,即字符类型

short *pc; //把名字pc和*去掉,剩下的short就是pc指针变量自身的类型,即短整型类型

int *pc; //把名字pc和*去掉,剩下的int就是pc指针变量自身的类型,即整型类型

double*pc; //把名字pc和*去掉,剩下的double就是pc指针变量自身的类型,即浮点类型

注:当能定义出指针变量的时候,只需要把名字和*去掉,剩下的就是指针变量指向的类型

函数传参

  


网站公告

今日签到

点亮在社区的每一天
去签到