C语言学习--指针--指针和内存单元

指针和内存单元

指针: 地址

内存单元:  计算机中内存最小的存储单元。

 

 

 

 指针的定义和使用

int a = 10;

int *p = &a; *表示指针变量

*p = 250; 指针的解引用,间接引用

*p:  表示将p变量的内容取出来, 当成地址看待, 再找到该地址的内存空间

如果做左值: 存数据到空间

如果做右值:取出空间的内容

#include<stdio.h>

int main (void)
{

    int a = 10;  // 定义变量a , 并赋值为10

    int *p = &a;  // 定义一个指针变量, 并把a 变量的地址复制给指针变量p

    *p = 29000;  // 表示将p变量的内容取出来, 当成地址看待, 再找到该地址的内存空间, 在把2900 写到这个内存空间

    printf("a 变量的值为 %d", a);

}

a 变量的值为 29000
#include<stdio.h>

int main (void)
{

    int a = 10;  // 定义变量a , 并赋值为10

    int *p = &a;  // 定义一个指针变量, 并把a 变量的地址复制给指针变量p

    //*p = 29000;  

    a = 350;

    printf("*p 变量的值为 %d", *p); // 表示将p变量的内容取出来, 当成地址看待, 再找到该地址的内存空间, 在取出这个内存空间里面的值  350
}

*p 变量的值为 350

 

 

#include<stdio.h>

int main()
{
    
    int a = 10;
    int * p;
    p = &a;//定义指针变量之后要马上复制, 避免出现野指针(没有指向的指针变量)
    printf("the a is %d",*p);

    return 0;

}
#include<stdio.h>

void func(int *x, int *y){
    *x = 10;//*: 指向变量x所代表的地址, 然后把10 写到这个内存地址里面。
    *y = 20;
}

int main()
{
    
    int a = 100;
    int b = 200;
    int *p1 = &a;
    int *p2 = &b;
    func(p1,p2);//将a,b变量的地址传进去, 通过直接操作地址, 来改变变量a,b的值
    printf("a : %d, b :%d", a,b);//10, 20

    return 0;

}
#include<stdio.h>
int main()
{
    
    int arr[] = {1,2,3};
    int *p1 = arr; // int *p1 = &arr[0]
    p1+=2;//表示指针的偏移, 偏移两个4字节
    printf("%d",*p1);//3

    return 0;

}

 

 

#include<stdio.h>
#include<string.h>

int main()
{
    
    char *p1 = "hello world";//p1代表的是第一个字符的地址
    printf("sizeof *p1 %d \n ",sizeof(p1));//char 类型指针的大小
    printf("strlen is %d\n",strlen(p1));//打印有效字符的个数

    p1+=4;//p1 上面初始话的时候代表的是第一个字符的地址, 在偏移4个4字节, 就到o了

    printf("*p1 is %c",*p1);//o

    return 0;

}

 

#include<stdio.h>
#include<string.h>

int main()
{

    float a = 2.22;

    float *p2 = &a;

    printf("%d, %d \n",sizeof(a),sizeof(p2));//4,8
    printf("%x\n",p2);//2eb08d28
    printf("%f\n", *p2);//2.22

    return 0;

}

 

posted @ 2022-10-23 20:37  朵朵奇fa  阅读(124)  评论(0编辑  收藏  举报