C指针 记录

指针

内存四区

  1. 代码区–存放代码
  2. 全局区–全局的常量【字符串常量“abc”, 变量】
  3. 栈区-- 系统自动开辟,系统自动释放。并不是很大
  4. 堆区-- 动态开辟的内存,手动开辟,手动释放,很大
#include <stdio.h>

int main()
{
	// i的作用域在for循环中,在for中定义i, 未释放,系统自动处理, i存放于栈中
	for (int i = 0; i<10; i++)
	{
		printtf("%d\n", i);
	}
	// malloc free new delete 没有使用这些,基本上都在栈中
	return 0;
}

地址

把内存以单个字节为单位,分开。每一个字节编号,这个编号就是地址

  1. 编号是连续的
  2. 唯一的,不可变
  3. 取地址运算符:&,单目运算符 优先级只比 ()[].低

首地址

一段内存空间中第一个存储单元

指针变量:

  1. 用来存放地址的变量
  2. 内存大小都是4B
    地址是一些编号,一种数据。
    整数:int a
    字符:char c
    小数:float
    地址:指针变量
  • 指针变量的定义:
    // 数据类型 *变量名
    int *p; // 定义一个指针变量p,存的是地址
    		// int 指明指针指向的数据类型
    		// * 指明p这个变量是一个指针变量
    
  • 指针变量的赋值:
    int a = 1;
    int *p;
    p = &a;
    
  • 指针变量的引用:
    *p

野指针

不能明确指向的指针变量,危险

空指针

void *p

指针运算

+
-
++
--
指针偏移,去访问地址旁边的一些内存
指针变量的加减,已指针所指向的类型空间为单位进行偏移

char *p; // char 1 p+1   1B
int *p1; // int  4 p1+1  4B
double *p2; // double p2+1 8B

一维数组与指针

  1. 定义一个一维数据,数组名是这个数组的**《首地址》**。
  2. 访问数据元素
    下标法: a[0]、a[1]
    指针法:
    int a[5] = {1,2,3,4,5};
    int *p = a;
    for (int i=0; i < 5; i++)
    {
    	printf("%d", *(p+i));   // 不会改变p的地址
    	// printf("%d", *p++)  会改变p的地址
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值