C语言指针复习笔记

关于C语言指针问题(浅谈)

  • 问题引入:

    最近在学习共享内存时遇到了关于指针的问题,整个人是懵懵的。这也就说明了自己的知识掌握的不扎实。因此,我重新拿起了大一的课本,复习了C语言指针,并写此博客来方便以后的复习,以及帮助其他和我有相同问题的朋友。

  • 知识来源:

    1. 《C语言程序设计》 --谭浩强
    2. 《C Primer Plus》 第六版

  • 指针的重要性:不掌握指针就没有掌握C的精华
  • 何为指针:指针就是地址

  • 程序:(此程序作为下面概念引用)

      1. #include
      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))

    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
2. int main(){
3.     int *p1,*p2,*p,a,b;
4.     scanf("%d,%d",&a,&b);
5.     p1=&a,p2=&b;
6.     if(a

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

你可能感兴趣的:(C指针,指针,数组)