5.1 指针与地址

厦门大学的视频:

【C语言程序设计第8章:善于利用指针-哔哩哔哩】 https://b23.tv/44aBZHa

【C语言程序设计第8章:善于利用指针-哔哩哔哩】 https://b23.tv/bn7lpdi

5.1.1 什么是指针

5.1.2 如何定义指针变量

2024-3-24 再来看上图,突然看不懂,感觉有错误,又不是很确定。

笔记:这是取址 & 之后,直接赋值。这句代码将变量 p 初始化为指向变量 a 的地址。这意味着 p 指针现在存储了变量 a 的地址。

5.1.3 指针变量的大小

指针变量存的是什么?存的是一个地址,所以说你给指针变量指定了类型,但是根本不影响,它本身只是一个地址,它的大小和你这个指定的类型的大小是没有关系的。指针变量的大小和机器的位数是有关系的, 指针即地址,32位机、64位机,就是说这个地址是32比特位、64个比特位,x64平台下,指针变量的大小,就是64个比特位,也就是8字节。

5.1.4 取址 &

取址,取的其实是开头的地址,就是开头的编号。

// demo
#include <stdio.h>
int main() {
    int a = 10;
    printf("%p\n", &a);      //&a 取址
    return 0;
}

&a 取出来的是地址0x16d833308,也是个数值。

指针变量仅能存放某个地址,可以取址,但是不能直接指定值

例外,可以初始化为 0,空指针,不指向任何东西。

5.1.5 寻址 *

#include <stdio.h>

int i;
int *p = &i;
int main()
{
    i = 10;
    printf("%d\n", i);
    printf("\n");
    printf("%d\n", *p);
    printf("\n");
    *p = 20;
    printf("%d\n", i);
    printf("\n");
    printf("%d\n", *p);
    return 0;
}

5.1.6 指针变量的初始化

如果不初始化,指针变量的值是不确定的,所以指针变量的初始化很重要。初始化可以有两种:

int i;
int *p=&i;
int *p=NULL;

如果一开始不知道指针指向何处,最简单的方式就是将指针初始化为NULL,也就是置 0。

5.1.7 (& *p) 和 (*&p) 的区别

注意:两种表示方式中,对 p 的要求不一样。

Last updated