如何理解C语言指针
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,本篇内容主要讲解"如何理解C语言指针",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"如何理解C语言指针"吧!#includeint main(){
千家信息网最后更新 2026年10月31日如何理解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安全错误
数据库的锁怎样保障安全
南京欣网互联网络科技
深圳九邦互联网科技有限公司
重生之互联网科技帝国
中资互联网科技
互联网金融 科技
深圳互联网络科技有限公司
深圳天众互联网科技公司
互联网 新科技
深圳期待互联网科技
天扬科技互联网广告
金融科技和互联网金融
科技互联网的估值
长沙互联网科技
启辰互联网科技
易企秀互联网科技是做什么的
易租星互联网科技有限公司
互联网科技博主张洲
杭州科技互联网公司有哪些
上海旺乐尼互联网科技有限公司
科技互联网企业在行动
互联网 科技创新
掌上梦互联网科技
安控科技rtu产品工业互联网
重庆威客帮互联网科技
互联网企业和科技型企业
互联网科技项目计划书材料类
宝灵互联网科技有限公司
互联网科技融合创新
东营紫格互联网科技
绵阳真晨互联网科技有限公司