【C语言从入门到入土】第六章 指针(上)

第六章 指针

1.认识一下指针

1.指针 == 地址;访问变量的两种方式:1.变量名 ,2.地址

int a = 10;
类型 变量名 内存地址 值
//这样我们就引出来了,指针
    1.变量名能访问
    2.通过地址也能访问   & 取地址运算符   * 将地址内的值读出运算符
/*********************************************************************************************/
#include <stdio.h>
int main()
{
   
    int a = 10;
    printf("a的数值为%d\n",a);
    printf("a的地址为%p\n",&a);
    printf("a的数值为%d\n",*(&a));// * 是取值运算符,它可以把地址里面的数据来取出来
    //这个就是另外一种通过地址来取出来数值的方式
    return 0;
}
1.1指针的类型
int*ptr;//指针的类型是int*
char*ptr;//指针的类型是char*
int**ptr;//指针的类型是int**
int(*ptr)[3];//指针的类型是int(*)[3]
int*(*ptr)[4];//指针的类型是int*(*)[4]
1.2指针指向的类型
int*ptr; //指针所指向的类型是int
char*ptr; //指针所指向的的类型是char
int**ptr; //指针所指向的的类型是int*
int(*ptr)[3]; //指针所指向的的类型是int()[3]
int*(*ptr)[4]; //指针所指向的的类型是int*()[4]
 
 
1.在指针的算术运算中,指针所指向的类型有很大的作用。"指针的类型"(即指针本身的类型)和(指针所指向的类型)是两个概念.
2.当你对C 越来越熟悉时,你会发现,把与指针搅和在一起的"类型"这个概念分成"指针的类型"和"指针所指向的类型"两个概念.
3.从语法的角度看,你只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型。
1.3指针的值或者说所指向的内存区
指针的值:"指针本身存储的数值",这个值将被编译器当作一个地址,而不是一个一般的数值.在32位程序里,所有类型的指针的值都是一个32 位整数,因为32 位程序里内存地址全都是32 位长。

指针所指向的内存区:从指针的值所代表的那个内存地址开始,长度为 sizeof (指针所指向的类型)的一片内存区。以后,1我们说一个指针的值是XX,1就相当于说该指针指向了以XX为首地址的一片内存区域;我们说一个"指针指向了某块内存区域",就相当于说"该指针的值是这块内存区域的首地址。"
    
指针所"指向的内存区"和"指针所指向的类型"是两个完全不同的概念。
在例一中,指针所指向的类型已经有了,但由于指针还未初始化,所以它所指向的内存区是不存在的,或者说是无意义的。"不进行初始化的指针成为野指针,可能会段错误或者各种错误,谨记"
以后,每遇到一个指针,都应该问问:这个指针的类型是什么?指针指的类型是什么?该指针指向了哪里?"重点注意"

这个图怎么看??? 1.首先这个 3 是被一个变量 i 给存着,他的地址是 2000 2.而下面有一个存放着地址 2000(变量i的地址)的变量i_pointer,而这个变量本身又有一个自身的地址 3020

在这里插入图片描述

1.4指针所在的地址
 指针本身占了多大的内存?你只要用函数 sizeof (指针的类型)测一下就知道了。
在32 位平台里,指针本身占据了4 个字节的长度。
我的电脑是64位的,指针本身就占据了八个字节。
#include <stdio.h>
int main(){
   
	int *p;
	printf("%d",sizeof(p));
	
	return 0;
}
1.5通过故事来理解指针
  1. 去取快递,提别人给你寄的一百斤葡萄,工作人员递给你一张纸条给你,纸条上写的是葡萄的存放地址,你根据地址找到了葡萄。那么这张纸条就是所谓的指针,为啥工作人员给你字条而不直接给你葡萄,因为就像菜鸟驿站一样,快递太多,太大࿰
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橘猫.exe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值