关于C语言指针问题(浅谈)
-
问题引入:
最近在学习共享内存时遇到了关于指针的问题,整个人是懵懵的。这也就说明了自己的知识掌握的不扎实。因此,我重新拿起了大一的课本,复习了C语言指针,并写此博客来方便以后的复习,以及帮助其他和我有相同问题的朋友。
-
知识来源:
- 《C语言程序设计》 --谭浩强
- 《C Primer Plus》 第六版
- 指针的重要性:不掌握指针就没有掌握C的精华
- 何为指针:指针就是地址
-
程序:(此程序作为下面概念引用)
1. #include<stdio.h> 2. int main(){ 3. int a,b; 4. int *pointer\_a,*pointer\_b; 5. a=100;b=10 6. pointer\_a=&a; 7. pointer\_b=&b; 8. printf("a=%d,b=%d\n",a,b); 9. printf("\*pointer\_a=%d,\*pointer\_b=%d\n",*pointer\_a,*pointer\_b); 10. 11. 12. return 0; 13. }
1. 如何定义指针
类型 * 指针变量名(*:表示该变量类型是指针变量)
-
例如:
int * pointer;
-
注意事项:
1. 指针变量赋值
pointer\_a=&a;pointer\_b=&b;
(✔)*pointer\_a=&a;*pointer\_b=&b;
(×)指针就是地址,因此指针变量只能容纳地址,而对a和b来说地址是&a,&b。
错误的写法实际上是将a(*pointer_a)=&a,b(*pointer_b)=&b.
若想避免错误写法,可以在定义指针时初始化:int *pointer_a=&a,*pointer_b=&b;
2.必须指定基类型
原因:不同类型的数据在内存中所占的字节数是不相同的。
pointer_a++;(地址值加4(sizeof(int)=4))
扫描二维码关注公众号,回复: 12577657 查看本文章3.赋值给指针变量必须是同类型的数据
float a;
int *pointer;
pointer=&a;
(×)4.指针变量中只能存放地址
* pointer=100;(×)
2. 怎样引用指针变量
-
重点
&:取地址运算符。 *:指针运算符(间接运算符)。*p是指针变量p指向的对象的值
(1) 给指针变量赋值:
p=&a; 指针变量p的值是变量a的地址,即p指向a;
*p=1; 等同于a=1;
printf("%d\n",*P);
printf("%o\n",p);输出a的地址
(2) 指针变量使用实例:
1. #include<stdio.h>
2. int main(){
3. int *p1,*p2,*p,a,b;
4. scanf("%d,%d",&a,&b);
5. p1=&a,p2=&b;
6. if(a<b){
7. p=p1;p1=p2;p2=p;
8. }
9. printf("a=%d,b=%d\n",a,b);
10. printf("max=%d,min=%d\n",*p1,*p2);
11. return 0;
12. }
3. 字符串、字符数组、指针变量
- 字符数组
C语言中没有真正的字符串类型,可以通过字符数组表示字符串,因为它的元素地址是连续的。
char str[10] = {“hello world”};
C语言中规定数组代表数组所在内存位置的首地址,也是 str[0]的地址,即str = &str[0];
而printf("%s",str); 为什么用首地址就可以输出字符串。。
在C语言中字符串常量的本质表示其实是一个地址!!!
来源:https://blog.csdn.net/liusicheng2008_liu/article/details/80412586
原创不易,请大家多多支持与交流,共同进步!!!
2019/11/17 15:06:59