C语言指针笔记(自用)-创新互联
指针就是地址,地址就是指针
地址就是内存单元的编号
指针变量是存放地址的变量
指针和和指针变量是两个不同的概念
但是要注意:通常我们叙述时会把指针变量称为指针,实际他们含义并不一样
指针的重要性:
表示一些复杂的数据结构
快速的传递数据
使函数返回一个以上的值
能直接访问硬件
能够方便的处理字符串
是理解面向对象语言中引用的基础
总结:指针是C语言的灵魂
指针的定义
地址:内存单元的编号;从零开始的非负整数;本质就是一个操作受限的非负整数
常见错误
附注:
的含义:1. 乘法;2. 定义指针变量;3. 指针运算符:该运算符放在已经定义好的指针变量的前边,如果p是一个已经定义好的指针变量,则p表示以p的内容为地址的变量
*p表示以p的内容为地址的变量
如何通过被调函数修改主调函数普通变量的值
1.实参必须为该普通变量的值
2.形参必须为指针变量
3.在被调函数中通过 *形参名= 的方式就可以修改主调函数相关变量的值
指针和数组
指针和一维数组
一维数组名是个指针常量,他存放的是一维数组第一个元素的地址下表和指针的关系 如果p是指针,则p[i] 永远等价于 *(p+i) 如果一个函数要处理一个一维数组【如果一个函数要处理一个一维数组则需要接收该数组那些信息】![在这里插入图片描述](https://img-blog.csdnimg.cn/16a633fc53ba4474915f64abb208d048.png)
指针变量的运算
指针变量不能想加 相乘 也不能相处 只能相减
如果两个指针变量指向的是同一块连续空间中的不同存储单元,则这两个指针变量才能相减
一个指针变量到底占几个字节
sizeof(数据类型)
功能:返回值就是该数据类型所占的字节数
假设p指向char类型变量(1个字节)
假设q指向int类型变量(4个字节)
假设r指向double类型变量(8个字节)
总结:一个指针变量,无论他指向的变量几个字节,该指针变量只占四个字节;一个变量的地址使用该变量首字节的地址来表示
指针和二维数组
- 指针和函数
- 指针和结构体
- 多级指针
专题:
动态内存分配
传统数组的缺点:
1.数组长度必须事先且只能是长整数,不能是变量
例子:int a[5];
2.传统形式定义的数组,该数组的内存程序员无法手动释放;数组一旦定义,系统就会为该数组分配存储空间就会一直存在,除非数组所在的函数运行结束
3.数组的长度一但能定义,其长度就不能更改
数组的长度不能在函数运行的过程中动态的扩充或缩小
4.A函数定义的数组,在A函数运行期间可以被其他函数使用,但A函数运行完毕之后,A函数中的数组将无法在其他函数使用
为什么需要动态分配内存:
动态数组很好的解决了传统数组的这4个缺陷,而且传统数组也叫静态数组
动态分配举例 动态分组的构造:
静态内存和动态内存的比较:
静态内存是由系统自动分配,由系统自动释放
静态内存是在栈分配的
跨函数使用内存问题
#includeint main(void)
{int * p;//p是变量的名字,int*表示p变量存放的是int类型变量的地址
//p变量的数据类型是int*类型,int*类型就是存放int变量地址的类型
int i = 3;
p = &i;//OK 把i的地址赋给p,p保存了i的地址,因此p指向i,*p = i
//p不是i,i也不是p,更准确的说,修改p的值不影响i的值,修改i的值也不影响p
//如果一个指针变量指向了某个普通变量则*指针变量就完全等同于普通变量
p = i ;//error 因为类型不一致,p只能存放int类型的地址,不能存放int类型的值
p = 55;//error,原因同上
return 0;
}
eg:如果p是个指针变量,并且存放了普通变量i的地址,则p指向了普通变量i
p 就完全等同于 i
或者说:在所有出现p的地方都可以替换成i;
在所有出现i的地方都可以替换成*p
*p就是以p的内容为地址的变量
//经典指针程序_互换两个数字
#includevoid huhuan (int *p, int *q)
{int t; //如果要互换*p和*q的值,则t必须定义成int,不能定义成int*
t = *p; //p是int*,*p是int
*p = *q;
*q = t;
return;
}
int main (void)
{int a = 3;
int b = 5;
huhuan( &a, &b);
printf("a = %d, b = %d\n",a,b);
return 0;
}
#includeint main(void)
{int * p;
int i = 5;
char ch = 'A';
p = &i;//*p 以p的内容为地址的变量
return 0;
}
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
当前标题:C语言指针笔记(自用)-创新互联
地址分享:http://scyanting.com/article/dhjjpj.html