c语言学习笔记(十四:指针二


1.指针的算术运算
char a[20];  
int *ptr=(int *)a; //强制类型转换并不会改变a 的类型  
ptr++;  

指针ptr 的值加上了sizeof(int),由于地址是用字节做单位的,故ptr 所指向的地址由原来的变量a 的地址向高地址方向增加了4 个字节。

2.&和*

这里&是取地址运算符,*是间接运算符。
&a 的运算结果是一个指针,指针的类型是a 的类型加个*,指针所指向的类型是a 的类型,指针所指向的地址是a 的地址。
*p 的结果是p 所指向的东西,它的类型是p 指向的类型,它所占用的地址是p所指向的地址。

3.数组和指针
int b[10];
b[4] = 3;

找到符号b,然后发现其类型为int[](假想表达方式,C语言中不支持这样写),所以计算式变成了0x1008+4×sizeof(int)=0x1018,然后把3放入0x1018就可以了。用一个式子表达就是*(0x1008+4)=3。

4.指针和结构类型
 struct MyStruct  
    {  
        int a;  
        int b;  
        int c;  
    };
    //声明了结构对象ss,并把ss 的成员初始化为20,30 和40。    
    struct MyStruct ss={20,30,40};
    //声明了一个指向结构对象ss 的指针。它的类型是MyStruct *,它指向的类型是MyStruct。  
    struct MyStruct *ptr=&ss;
    //声明了一个指向结构对象ss 的指针。但是pstr 和它被指向的类型ptr 是不同的。
    int *pstr=(int*)&ss;     
ptr->a; //指向运算符,或者可以这们(*ptr).a,建议使用前者
ptr->b;
ptr->c;
*pstr; //访问了ss 的成员a。
*(pstr+1); //访问了ss 的成员b。
*(pstr+2) //访问了ss 的成员c。

5.指针和函数的关系

把一个指针声明成为一个指向函数的指针。

int fun1(char *,int);
int (*pfun1)(char *,int);
pfun1=fun1;
int a=(*pfun1)("abcdefg",7); //通过函数指针调用函数。
6.指针类型转换

强制类型转换p=(int*)&f;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值