指针易错知识点小结


一、C语言指针知识点小结

1、初始化指针的时候会自动分配八个字节(任何类型的指针)

       1>    定义指针变量的时候,如int *p;  仅仅是代表该变量是指针变量,可以认为(int * )p;

       2>   p = &a;是正确的。

                         int *p = &a; 正确。表示把a的地址赋给p,是的指针p指向a.

                *p = &a;这条语句是错误的,它表示的是把a的地址赋给*p所指向的变量,意味着把a的地址赋给a自己。

       3>   如定义:int ages[5];

                              int *p;

                               p = ages;

                              现在可以有三种方式去访问ages数组:

                               (1)数组名[下标]: ages[1];

                               (2)指针变量名[下标]: p[1];

                               (3)*( p + 1 ); 指针变量加一,究竟加多少取决于指针的类型,如果是int类型指针,实际上该地址增加了四个字节。

2、指针与字符串。

       1>    定义字符串的两种方式:

                               (1) 利用数组,char name[] = “ black ”;

                                              特点:字符串里的字符可以修改,常用在经常需要修改内容的场合。

                               (2) 利用指针,char *name= “ black ”;

                                               特点:该字符串其实是一个常量字符串,放在内存中的常量区,里面的字符不可以修改;

                                                          常用在字符串需要经常用到而且内容不需要修改的场合。

                                                 输出:printf("%c",*name);    // b;               *name指向字符串首地址。
       printf("%s",name);     // black;              因为%s会从该首地址开始依次输出,直到‘\0’;

         2>    定义指针字符串数组;

                                       char *name[5]  =  {"apple","bear","banana"};

3、指针与函数和结构体。

         1>    返回指针的函数:

char *test()

 {   

  return "rose";

}

  main函数里面写 char *name = test (); 就可以用name来接受test中返回的指针。相当于 char *name = “rose”;

          2>    指向函数的指针:   

如:void (*p) ();  // (*p)是固定写法,代表指针变量p将来肯定是指向函数,左边的void代表指针变量p指向的函数没有返回值,右边的括号表示指针变量p指向的函数没有形式参数。

p = test; // 指针变量P指向了test函数。

接下来调用方式有三种:

                               (1) (*p)();   // 先利用指针间接调用函数test();

                                (2) p();     //也是调用test()函数;

                                (3)test();    //直接调用

                                举例:double haha(  double d,  char  *s, int ){}

main()

{

double(*p)(double ,char *,int);  //  定义指针函数

p = haha;        //  指针P指向函数haha

                                  (*p)(10.7,"jack",10); //调用函数

}

          3>    指向结构体的指针:  

如: struct Student

 {

int age;  

 int no;

}

struct Student stu = {23,2};

struct Student *p ;      //指针p将来指向struct Student类型数据。

p = &stu;

3种访问方式:

                                    (1)    printf("age = %d,no = %d\n", stu.age,   stu.no);

                                    (2)    printf("age = %d,no = %d\n",(*p).age, (*p).no);

                                    (3)    printf("age = %d,no = %d\n",p->age, p->no);







  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值