关于C语言指针的一些理解(一)
2018-03-07 23:00
453 查看
在谭浩强老师编写的C程序设计(第二版)一书指针那一章节中,他明显的指出了每一个学习和使用C语言的人,都应该深入的学习和掌握指针。不掌握指针就没有掌握C语言的精华。因此指针的学习是非常重要的。在以下的几篇博客中,我将将自己在学习C语言中面临的一些困惑分享出来,希望对大家有所帮助。
1、在程序中每一个变量都是都有一个地址,一个变量的地址就称为该变量的指针。如果有一个变量专门用来存放另一个变量的地址,那么这个变量就称为指针变量。首先应该理解指针与指针变量两者的概念和区别。
下面举个例子来具体说明指针与指针变量:
int *p;
int i=3;
p=&i;
在此例中,p就是指针变量,i的地址可以用p来表示。*p=3,*p和i的作用相同。
2、定义指针变量
指针变量的定义格式为: 基类型 *指针变量名
指针变量名和定义一般变量一样,也可以为数组名。
关于为什么要定义基类型:因为不同的数据类型在内存中占据不同的字节,如整型占据两个字节,实型占据4个字节,字符型占据1个字节。指针在移动一个位置时,对应于整型变量移动2个字节,实型变量移动4个字节,而字符型变量移动1个字节。因此必须定义指针变量的类型即基类型。
3、关于指针变量运算符运算优先顺序的一些说明
*、&、++、--,他们的优先级别相同,运算顺序为从右至左。
4、交换指针变量的值和交换实参的值
main()
{
int *p1,*p2,*p,a,b;
a=3;b=4;
p1=&a;p2=&b;
if(a<b)
{
p=p1;p1=p2;p2=p;
}
printf("%d,%d",a,b);
printf("%d,%d",*p1,*p2);
}
输出结果为:3,4
4,3
下面这个程序结果则相反:
swap (int *p1,int *p2)
{int temp;
temp=*p1;p1=*p2;p2=temp;
}
main()
{
int a,b,*q1,*q2;
a=3;b=4;
if(a<b)swap(q1,q2);
printf("%d,%d",a,b);
}
输出结果为:4,3
最上面那个程序p1值由&a变成&b,p2值由&b变成&a,而下面那个程序则是在指针变量作为形参时,在函数执行过程中使指针变量所指向变量值发生变化时,函数调用结束后变化依然被保留下来。这样使用指针变量就解决了变量值“单向传递”的问题。
1、在程序中每一个变量都是都有一个地址,一个变量的地址就称为该变量的指针。如果有一个变量专门用来存放另一个变量的地址,那么这个变量就称为指针变量。首先应该理解指针与指针变量两者的概念和区别。
下面举个例子来具体说明指针与指针变量:
int *p;
int i=3;
p=&i;
在此例中,p就是指针变量,i的地址可以用p来表示。*p=3,*p和i的作用相同。
2、定义指针变量
指针变量的定义格式为: 基类型 *指针变量名
指针变量名和定义一般变量一样,也可以为数组名。
关于为什么要定义基类型:因为不同的数据类型在内存中占据不同的字节,如整型占据两个字节,实型占据4个字节,字符型占据1个字节。指针在移动一个位置时,对应于整型变量移动2个字节,实型变量移动4个字节,而字符型变量移动1个字节。因此必须定义指针变量的类型即基类型。
3、关于指针变量运算符运算优先顺序的一些说明
*、&、++、--,他们的优先级别相同,运算顺序为从右至左。
4、交换指针变量的值和交换实参的值
main()
{
int *p1,*p2,*p,a,b;
a=3;b=4;
p1=&a;p2=&b;
if(a<b)
{
p=p1;p1=p2;p2=p;
}
printf("%d,%d",a,b);
printf("%d,%d",*p1,*p2);
}
输出结果为:3,4
4,3
下面这个程序结果则相反:
swap (int *p1,int *p2)
{int temp;
temp=*p1;p1=*p2;p2=temp;
}
main()
{
int a,b,*q1,*q2;
a=3;b=4;
if(a<b)swap(q1,q2);
printf("%d,%d",a,b);
}
输出结果为:4,3
最上面那个程序p1值由&a变成&b,p2值由&b变成&a,而下面那个程序则是在指针变量作为形参时,在函数执行过程中使指针变量所指向变量值发生变化时,函数调用结束后变化依然被保留下来。这样使用指针变量就解决了变量值“单向传递”的问题。
相关文章推荐
- 关于c语言二维数组与指针的个人理解及处理办法。
- 关于对 (char *)字符指针强制转换类型的一些理解
- 谈谈自己对C语言中函数指针的一些理解 (第一次写博客,有点小兴奋哈)
- 关于C语言中二级指针的理解
- 关于c语言二维数组与指针的个人理解及处理办法。
- C语言中关于数组、指针以及函数的一些基本知识
- 关于C语言指针的一些新认识(1)
- 关于函数指针数组和函数指针数组的指针的一些理解
- 结构体指针(关于C语言传值的理解)
- 关于一些c的指针的的理解!就当做是来做笔记了
- 关于指针、const、typedef、作用域::、引用&的一些理解
- [C语言]菜鸟的一些理解-指针
- 关于C指针的一些理解
- 关于C语言指针的一些新认识(2)
- 关于指针的一些理解
- C语言中关于const与指针结合的理解
- 关于指针函数以及函数指针的一些理解
- 关于C语言指针的理解
- 关于C语言的文件型指针和移位操作中的一些有趣问题的探讨
- 关于C语言的指针传递地址的一些思考