一: 指针的定义与初始化:
1定义:内存中最小的存储单元是字节。 而每一个字节在内存中都有一个编号,就是指针。指针:内存地址。
2指针变量: 是存放内存地址的变量。
3定义一个指针变量:指针所指向的数据类型 *指针变量名称; =====> int *p;
(¥¥)在定义变量时,*是一个类型说明符,说明这个变量是指针变量。在不是定义变量的时候,*是一个操作符,访问指针所指向的那一块存储空间,并操作所指向的变量。
4初始化:1:定义指针时,只有定义,没有初始化的指针中是垃圾值,这时这个指针称为野指针。 2:如果操作一个野指针: ①程序崩溃。② 访问了不该访问的存储空间,造成潜在的逻辑错误。 3:(¥)定义指针变量时,不可以使用整形常量赋值给指针变量。 而且内存是操作系统分配的。并不应该我们来定义。 4:什么样类型的指针指向什么类型的变量。 5:多个指针可以指向同一个变量, 6:指针的指向可以改变。
5基本数据类型作为函数的参数传递是值传递。写一个函数来交换两个变量中的值。
6:指针的使用场景:1:在被调函数中,通过形参来改变主调函数中某个变量的值。 2:指针可以让函数返回多个值。
7:定义一个函数,返回两个数的和,差。
二:指针为什么要区分数据类型:所有的指针类型都是占用8个字节存储空间。
1:变量的地址,是便来给你所占的存储空间的首地址。
2:指针变量仅仅可以存储一个地址编号,如果没有类型,当通过指针就不知道要访问多少个字节的存储空间。
3:指针区分类型是为了通过指针访问所指向的存储空间时能正确的访问。
4:如果通过一个char类型指针操作int类型变量,如果这个值得二进制超过了1字节,就会造成数据错误。
5:如果通过一个int类型指针,操作一个char类型的变量,那么就会修改了不该修改的内存,造成程序的逻辑错误。
三: 指针与一维数组,指针与二维数组。
1:数组就像是一个指针:访问数组中的元素,使用数组与使用指向这个数组的指针的等价的。
但数组并不是一个指针 :① sizeof(array)!= sizeof(pointer ) :当一个数组赋值给一个指针变量的时候,那么数组中的有些信息会丢失,比如数组的长度,这种现象称为指针信息遗失。
② 指针的指向是可以改变的,但数组的指向是不可以改变的。(不能改变一个数组的地址)
2: 定义一个指针数组的格式: 数据类型 *指针变量名称[指针个数] ;
定义一个指向一维数组的指针: 数据类型 (*指针名称)[所指向的一维数组的元素个数];
指针+整数= 指针中的值 +所指向的数据类型的长度*整数。
nums 与 nums[0]: 相同点:对应的地址相同。
不同点: 他们的指针类型不同, nums+1===>nums+sizeof(num[0]) nums[0]+1====> nums+sizeof(int)
sizeof(nums):二维数组所占用的存储空间的字节数。
sizeof(nums)/sizeof(int):二维数组中一共有多少个int类型的数据。
四:写一个函数。把一个int类型的数据逐字节的输出。
目前对于指针 与 字符串之间 。还是比较模糊。