指针笔记_1
发布日期:2021-11-20 10:17:32 浏览次数:8 分类:技术文章

本文共 2629 字,大约阅读时间需要 8 分钟。

基本类型指针

参考链接:https://blog.csdn.net/ZackSock/article/details/101594794
1.指针的表示方法:数据类型* 变量名 如:int* p 代表 p是一个指针类型的变量即 int*类型。

2.指针变量存放的地址,所以赋值形式只能是其他变量的地址,其表示形式可用下面代码可解释:

其中p=&i,表示p指向i,所以*p等于i

#include "pch.h"#include 
int main(){
int* p;//说明只能存放整型变量的地址,例如:i为整型,所以,i的地址可以存放到p里面, //p是变量的名字,int*表示p变量存放的是int类型变量的地址 int i = 3; p = &i;//正确 //p = i; //错误,因为类型不一致,p只能存放int类型变量的地址,不能存放int类型变量数值 return 0;}

3.通过指针的形式可以修改普通变量的值

解释:
程序中定义了i变量,p变量,所以他们都是有计算机为他们分配了空闲的地址供他们使用,假如 i 的地址为1000H,则p =&i,代表p中存放了i的地址,也就是p指向了i,所以p表示以p的内容为地址的变量,所以p=i,这样通过修改*p的值可以改变i的值,如下:
#include “stdio.h”

void f(int* p) {

*p = 100;
}

int main(void)

{
int i = 9;
f(&i);
printf(“i=%d\n”, i);
return 0;
}
3.1程序实例
/*
指针就是地址,是一个内存单元的编号
而指针变量是存放地址的变量,
指针和指针变量是连个不同的概念,但通常叙述时会把指针变量简称为地址
*/

#include "pch.h"#include 
int main(){
int* p;// p是一个变量,p变量的数据类型为 int* 类型,int* 指存放int变量地址的类型 int i = 3; int j; p = &i;/*1 p保存了i的地址,因此p可以指向i。 2 但p不是i,i也不是p,更准确的说,修改p得值不影响i的值,修改i的值也不影响p的值 3. 如果一个指针变量指向了某个普通变量,则 *指针变量 就完全等同于 普通变量 例子: 如果p是个指针变量,并且P存放了普通变量i的地址p =&i,则p指向普通变量i *p 就完全等同于i,(规定是这样写) 或者说: 在所有出现*p的地方都可以替换成i,在所有出现i的地方都可以替换成*p */ j = *p; // *p就是以p的内容为地址的变量 printf("i = %d,j=%d\n", i, j); return 0;}

4.经典指针的程序——互换两个数字

4.1 普通互换方式

#include 
int main(){
//普通写法 int a = 3; int b = 5; int t; t =a; a=b; b=t; printf("a=%d\nb=%d\n", a, b); return 0; }

4.2 若定义一个调用函数,不能完成4.1操作互换

解释:当定义了函数huhuan_1,主函数的a,b和函数huhuan_1中形参a,b不是一个,因为 :
主函数中的a,b分别分配了地址, 函数huhuan_1中的a,b也分别分配了地址,是不同的地址,而这样的调用,只是改变了形参中的值,但是当函数调用完成后,释放掉了,所以主函数中的a,b的值没有改变。***/形参和实参不是一个变量,即使可能名字一样,但是意义不同,
//当一个函数使用完后,为这个函数使用的所有静态空间都会被释放,因为一个函数不可能只让一个使用***(注意:主函数的a,b和huhuan_1中的a,b都是局部变量,局部变量只在自己的函数中使用),而使用指针调用可以改变,因为:
指针变量可以存放地址,通过改变地址的内容可以完成互换,如4.3

#include 
//不能完成互换void huhuan_1(int a, int b) {
int t; t = a; a = b; b = t; return;}int main(){
//普通写法 int a = 3; int b = 5; huhuan_1(a,b); printf("a=%d\nb=%d\n", a, b); return 0; }

4.3 指针完成互换

#include 
//不能完成互换功能,只是互换了地址,并没有互换指针所指向的地址里面的值。**两个值真正的互换必须是地址所对应的值换了。**void huhuan_2(int * p, int * q) {
int* t;//t必须是int*类型,不能是int t = p; p = q; q = t; return;} //这个正确void huhuan_3(int * p, int * q) {
int t;//t必须是int*类型,不能是int,如果要互换*p,*q的值,必须定义t为int,不能是*t t = *p;//p是int*, *p是int *p = *q; *q = t; return;}int main(){
//普通写法 int a = 3; int b = 5; //huhuan_2(&a, &b);//huhuan_2(*p,*q);是错误的,huhuan_2(a, b)错误 huhuan_3(&a, &b); printf("a=%d\nb=%d\n", a, b); return 0; }

5.指针在指向时必须类型一致

如程序中p =&ch //错误写法

#include 
int main(){
int * p; int i = 5; char ch = 'A';//单个字符用单引号。字符串用双引号 //p = &ch; //类型不一样 p = &i;//正确,*p = i,*p表示以p的内容为地址的变量 return 0;}

转载地址:https://blog.csdn.net/weixin_43223362/article/details/101310264 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:指针笔记_2
下一篇:C语言编程中遇到的问题

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年04月20日 23时11分59秒