C语言指针重点难点笔记

知识点一:什么是指针,即指针的定义是什么?
 

指针(Pointer),是编程语言中的一个对象,通过地址直接指向内存中该地址的值。由于通过地址能找到所需变量的存储单元,可以说地址指向该变量的存储单元,因此可以将地址形象化称为“指针”。总而言之,指针就是变量,存放内存单元的地址,存放在指针中的值都会被当作地址处理。

补充知识:

1.一个内存单元就是一个字节

2.内存的单位:1QB=1024TB   1TB=1024GB   1GB=1024MB    1MB=1024KB   1KB=1024byte    1byte=8bit

#include<stdio.h>
int main()
{
    int a=5;  //在内存中开辟一块内存空间,存放变量a的值5
    int *p=&a;  //取出变量a的地址存放在变量p中,p是一个指针变量
    // int *p;
    //p=&a;
    return 0;
}

 知识点二    请记住两个操作符:&和*

&取地址操作符,得到的是内存地址【指针用来保存地址,&用来取出地址】

#include <stdio.h>
int main()
{
    int a=5;
    int *p=&a;
    printf("%p\n",&a);
    return 0;
}

 补充知识:%p是专门用来打印地址的

这里有个小问题:指针变量能存放自己的地址吗

#include <stdio.h>

int main()
{
    int a,*a;
    a=&a;

    return 0;
}

 *解引用操作符

#include <stdio.h>
int main()
{
    int a = 20;
    int *p = &a;
    *p=10;
    printf("%p\n",p);
    printf("%p\n",&a); 
    printf("%d\n",*p);
    printf("%d\n",a); 
    return 0; 
}

 分析:

int *p:p是指真变量,定义指针变量需要在相关的数据类型后面加 上*,此处的*并非解引用操作符,仅仅是一种格式。并无实际意义,int则是变量p所指对象的数据类型。

int *p=&a;这一步是取出a的地址(对应&a),并赋值给指针变量p;

*p=10;此处的*是解引用操作符,目的是直接访问p的地址即a,并将阿德大小改成10.

再强调一下此处的*和int*中的*的意义不同,前者是解引用操作符,后者收集一种语法形式,无实际意义。

知识点三:指针变量有多大?

一个指针变量在32为计算机上,占4个字节;

一个指针变量在64位计算机上,占8个字节。

这是为什么呢?我们逐层分析一下?

1,预备知识sizeof()函数

sizeof(数据类型)

         返回值就是该数据类型所占的字节数

sizeof(变量名)

        返回改变量所占的字节数

#include <stdio.h>
int main()
{
    char ch='a';
    int i=99;
    double x=66.6;
    
    char *p=&ch;
    int *q=&i;
    double *r=&x;
    printf("%d%d%d\n",sizeof(p),sizeof(q),sizeof(r));
    return 0;

}

   我们通过代码测试发现,指针变量p,q,r所占字节大小 都是8.        

2指针变量存放的是什么、

内存中是一个字节一个编号

double类型实战8个字节,也就是说有8个编号

指针变量只保存第一个变量的地址

3.我们知道指针变量所指向的变量占几个字节?

这是由指针变量的类型来决定

如果是int*说明指向的变就占四个字节

我们如果知道了他是int类型的变量,那么就从它保存的地址变量开始向下数4个单元

(一个单元一个字节)

4.为什么指针变量占8个字节呢

p,q,r都只保存了第一个字节的地址也就是他们只占了一个字节的地址,但为什么需要8个字节呢,说明第一个字节的地址(就是一堆编号)通过8个字节去保存

这里我们还需要了解一下计算机组成原理的一些知识

首先,我们要明白,

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值