如何理解C语言指针
发表于:2025-02-08 作者:千家信息网编辑
千家信息网最后更新 2025年02月08日,本篇内容主要讲解"如何理解C语言指针",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"如何理解C语言指针"吧!#includeint main(){
千家信息网最后更新 2025年02月08日如何理解C语言指针
本篇内容主要讲解"如何理解C语言指针",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"如何理解C语言指针"吧!
#includeint main(){ int a = 10; int b = 20; int* p = &a;//*定义指针变量 *p = 100;//*间接访问,解引用,a = 100 p = &b;//p保存b的地址 *p = 200;//b = 200 int** pp = &p;//对指针取地址,二级指针 *pp = &a;//解一次引用,一级指针p保存的值,即a的地址 **pp = 1000;//解二次引用,a = 1000 *pp = &b;//解一次引用,一级指针p保存的值,即b的地址 **pp = 2000; // 解二次引用,b = 2000 int*** ppp = &pp;//三级指针 **ppp = &a;//解二次引用,一级指针p保存的值,即a的地址 ***ppp = 5000;//解三次引用,a = 5000 **ppp = &b;//解二次引用,一级指针p保存的值,即b的地址 ***ppp = 6000;//解三次引用,b = 6000 printf("%d", a); return 0;}
#includeint main(){ int a = 0; int b = 0; int c = 0; int* p1 = &a; int* p2 = &b; int* p3 = &c; *p1 = 100; *p2 = 200; *p3 = 300; *p3 = *p1 + *p2; *p3 = *p1 / *p2; *p3 += 1; printf("%d %d %d\n", *p1, *p2, *p3);//100,200,1 return 0;}
指针的大小只与平台有关
32位sizeof( * )=4
64位sizeof( * )=8(字节)
#includevoid Swap_1(int* p1, int* p2)//p1,p2分别保存a和b的地址{ int *tmp = p1;//定义指针变量tmp,把p1的值(即a的地址)赋给tmp p1 = p2;//把p2的值(即b的地址)赋给p1 p2 = tmp;//把tmp的值(即a的地址)赋给p2} //只交换地址,并没有更改值#if 0void Swap_2(int* p1, int* p2){ int* tmp;//悬挂指针,野指针 *tmp= *p1; *p1 = *p2; *p2 = *tmp;}#endifvoid Swap(int* p1, int* p2)//p1,p2分别保存a和b的地址{ int tmp; tmp = *p1;//把p1解引用的值(即a的值)赋给tmp *p1 = *p2;//把p2解引用的值(即b的值),赋给p1解引用的值(即a的值) *p2 = tmp;//把tmp的值(即a的值)赋给把p2解引用的值(即b的值)} //完成交换。int main(){ int a = 10; int b = 20; Swap(&a, &b);//主函数的改变要想影响到自定义函数:(1)必须传递指针,(2)必须解引用 printf("%d,%d\n", a, b); return 0;}
#includeint main(){ int arr[10] = { 1,2,3,4,5,6,7,8,9,10 }; for (int* p = arr; p <= &arr[9]; p++) //for (int* p = arr; p < &arr[10]; p++) //for (int* p = &arr[9]; p >= &arr[0]; p--) //for (int* p = &arr[9]; p > &arr[-1]; p--) { printf("%d ", *p); } char a = 'x'; char* p = &a; //int* np = &p;//指针类型不同 return 0;}
#includevoid Fun(int* p){ //p = NULL;//空指针,p的值为0 int* p1= p;//p1保存p的值 int* p2 = NULL;//p2保存NULL int tmp; tmp = *p1;//把p1解引用的值(即p的值)赋给tmp *p1 = *p2;//把p2解引用的值(即NULL),赋给p1解引用的值(即p的值) *p2 = tmp;//把tmp的值赋给把p2解引用的值}int main(){ int a = 10; int* p = &a; Fun(p); //p = NULL; printf("%d\n", *p); return 0;}
总结
assert()(需要头文件#include
断定表达式一定为真,如果为假程序崩溃,并报告错误位置。
release面向用户版本:assert后面需要进行条件判断。
void* 通用指针,泛型指针
void*无数据类型,不参与运算,不能++和解引用
赋值 | 通用指针 = 特定指针 | 特定指针 = 通用指针 |
---|---|---|
C++ | char* p; void* p1=p; | 不可以 (char* p; void* p1=p; int* p2=p1 (p2=p)数据类型不同 ) |
C | char* p; void* p1=p; | void* p; char* p2=p; |
C++:NULL--0
C:NULL--((void*)0)
先有C后有C++,C++不支持void*赋值,故定义为0
到此,相信大家对"如何理解C语言指针"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
指针
地址
语言
类型
不同
内容
函数
变量
数据
C++
学习
实用
更深
位置
兴趣
大小
字节
实用性
实际
平台
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
昆明互联网科技公司有哪些
网络技术能不能专升本
cad软件开发各阶段的任务
苏州戴尔服务器还原
免费数据库服务
emlog数据库怎么查看
oppo网络安全证书如何删除
量子网络技术上市公司
逆水寒玩家蹲守原服务器氪金大佬
医疗设备网络安全整改报告
e5v3戴尔服务器
晋城学网络技术
2021山东省网络安全宣传周
支付宝充值服务器显示内部错误
孟津软件开发项目管理
魔兽世界单机数据库服务名已存在
漳州市公司软件开发
数据库中大于小于运算符
农行出现数据库更新错误
长沙应用软件开发服务费
regrna2.0数据库
域名注册后要租用服务器么
为什么服务器dns设置没有用
软件开发合同 docx
网络安全属于运维码
网络安全道德文件
vb ado插入数据库
大连甘井子区网络技术平台
杭州同花顺软件开发待遇
厦门吉比特网络技术股权激励