C语言(笔记)

指针

指针类型的意义:
1.指针类型决定了指针解引用的权限有多大(把0付给指针时,有多少内存空间变为0)
2.决定了指针走一步可以走多远

int arr[10]={0};
int *p=arr;
char *pc=arr;

虽然arr不是char型,但是依旧可以存在char里,不过pc+1就只能走一个字节。
野指针
指针指向的位置不可知。
成因:

  1. 没有初始化.(在声明指针的时候就要对其进行初始化)
int main() {
//p为野指针
	int* p;  //声明的时候没有初始化,系统会随机分配内存,这个内存不一定属于当前程序
	*p = 20;//之后把20放在这个内存里,属于非法访问内存。
}
  1. 指针越界

  2. 指针指向的空间释放

#include "stdio.h"
int* text() {
   int a = 10;
   return &a;
}
int main() {
   int* p=text();
   *p = 20;
   return 0;
}

a变量在出test时地址已经还给操作系统,此时p就算野指针。
避免野指针

  1. 指针初始化,声明的时候就赋值初始化
    当前不知道初始化为什么东西时,就一开始初始为NULL。
  2. 小心指针越界。
  3. 指针使用前检查有效性,如果此时指针指向空,没办法赋值,要重新给指针分配地址。

指针的运算

  • 指针减指针(两个指针指向同一块地址)
    得到的是指针与指针之间的元素个数,不是字节数
#include "stdio.h"
int strlen_(char * str) {
   char* start = str;
   while (*str != '\0')   //此处不是遍历地址,是解引用的值
   {
   	str++;
   }
   return str-start;     //直接用字符串第一个地址减去最后一个地址
}
int main() {
   int len = strlen_("abcd");
   printf("%d", len);
   return 0;
}

C++类和对象

构造函数和析构函数

构造函数

  1. 调用对象时自动调用构造,只会调用一次
  2. 可以有参数,可以重载

析构函数

  1. 不可以有参数,不可以重载
  2. 只调用一次

构造函数可以有多个,析构函数只能有一个
调用规则
在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值