仙桃网站网站建设,族谱网站开发,石家庄市住建局官网,编程教育机构/*** file * author jUicE_g2R(qq:3406291309)————彬(bin-必应)* 一个某双流一大学通信与信息专业大二在读 * copyright 2023.9* COPYRIGHT 原创技术笔记#xff1a;转载需获得博主本人同意#xff0c;且需标明转载源* language …/*** file * author jUicE_g2R(qq:3406291309)————彬(bin-必应)* 一个某双流一大学通信与信息专业大二在读 * copyright 2023.9* COPYRIGHT 原创技术笔记转载需获得博主本人同意且需标明转载源* language C */UpData Log 2023.9.22 更新进行中 Statement0 一起进步 Statement1 有些描述是个人理解可能不够标准但能达其意 技术提升站点
定义指针 与 取地址
int val1; //为 变量名为val 的 整型数据 开辟空间并存下val的值
int* pval; //定义一个指针变量是指针的原因使用到了*的名字为pp记录的是valval变量的地址此时 p指针 指向 val 这个整型变量
printf(%d 的地址是 %p\n,val, p);解引用返回p所指对象的值
//要使用 p所指向地址的值即val的值 的话需要 将p实质上是 val 的地址通过 * 解出来
printf(指针p指向的val的地址为 %p解引用得到val的值为%d,p, *p);通过 指针 修改 指针 所指地址的变量的值
//定义指针后*p 实质上就是 val修改 *p 就是修改 val因为变量名val 与 p 都指向的 val的地址
*p2; //此时 *pval2
printf(修改后val的值为%d,val);修改指针的指向
//声明两个变量
int a1,b2;
int* pa; //初始化 p 指向a变量
pb; //修改 p指针 存储 b的地址p由 指向a变量 变为 指向b变量
printf(修改后的p指针指向的值为%d,*p);无指向的野指针
注声明一个指针但不给分配指向这个指针是无效的野指针必须要给指针明确的指向
要先为 值 开辟一个空间内存 来进行 存储、调用、修改 操作
//错误示范
int* p;
*p2; cout*p;//下面这种是可以的
int* p;int val;
pval; //分配指向
*p2;输入
int val; int *pval;
scanf(%d,p); //pval效果等同于scanf(%d,val)
printf(%d,val);(*p) 、 * (p) 、*p 的区别 运算符优先级 点击了解更多 圆括号()优先级高于下面两种结合方式是 自左向右不论任何情况先执行括号内的东西 自增运算符不论前缀还是后缀 取值运算符*这两种的结合方式都是 自右向左 //(*p) p指针指向对象的值加1地址值不变
int val1; int* pval;
(*p); printf(p指针指向对象的值为%dval的值为%d,(*p), val);//Output:2,2//*(p) 与 *p 操作结果相同都是将地址值加1个整型字节4bit
int val1; int* pval;
printf(val的地址为%p\n,p);
*p; //现在的p指针就是一个野指针(*p)是无效的
printf(p指针的值地址为%p,p);
//Output
val的地址为63fe14
p指针的值地址为63fe18根据运算符优先级的结合方式可以推出 *p 与 (*p)思索一下自右向左的意思操作的结果是一致的即对 p指针指向对象的值加1
传参与收参 如何修改 val 的值 /*---------传参直接传地址--------*/
//传的如果是地址的话都是直接对 val这个地址 进行操作来直接修改地址对应的值
void Update(int* addr){ //接收参数的是地址声明一个指针变量为address此时 addresspval(*addr); //将地址 解引用 得到值对值修改
}
/*写法二
void Update(int* addr){int temp(*addr); //申请一个新内存用来操作值然后将p指向对象的值存下temp现在就是 val的值 的代理人temp; (*addr)temp;
}
*/
int main(int argc,char* argv[]){int val1; int* pval;Update(p); //传入的是 valval的地址printf(%d,val); return 0;
}//Output:2/*---------传参传的是val的值地址的解引用--------*/
void Update(int temp){ temp; //此时的修改是影响不到val的
}
int main(int argc,char* argv[]){int val1; int* pval;Update(*p); //传入的是 valval的值就和传普通的变量一样printf(%d,val); return 0;
}//Output:1指针 是 C语言 的精华是 C语言 的尽头值得细品