C语言指针学习

学了这么久的C语言,每次遇到指针都会晕头转向。。。。。。。。。。今天就先总结一些自己对指针的认识。由于这是自己的理解,有可能出现偏差,希望如果有错的地方希望大神可以帮忙指正。

1、首先指针是一个变量,其存储的是数据在内存中的地址,而不是数据本身的值,这点要切记(存储的是地址)

2、由于指针存储的是一个地址,利用sizeof()时,其实际上代指的是指针本身的值,即这个地址所占得字节数,而这个值与操作系统有关,32位操作系统为4字节,64位操作系统位8字节。

  以32位操作系统为例,定义Type *p;    sizeof(p) = 4;不管Type是        char,int, long, struct,  int **…

3、当在处理指针的算术运算时,一定要注意到底是指针所指向地址存储的数据的值*p的变化,还是指针所指向地址p的变化。

4、数组名也是一个地址,其可以理解为是一个常指针,只不过其只能指向本数组首元素的地址。

以32位操作系统为例,

int main()
{
    int arr[5] = {1,3,7,9,6};
    char array[] = {"hello!"};
    int *p = arr;
    char *p2 = array;

    printf("%d\n",*p);      //输出为1

    printf("%d\n",p);       //输出地址为2686728(打印地址因为%p,这里为了统一所以用了十进制)

    printf("%d\n",*p+2);    //输出值为3(*p为存储的数据的值即为1,然后+2)

    printf("%d\n",*(p+2));     //输出值为7(先是指针p向后移动2个字节,即现在指向a[2],其值为7)

    printf("%d\n",sizeof(*p));    //输出值为4(代表arr[0],其为int型)

    printf("%d\n",sizeof(p));     //输出值为4 (为指针,代表一个地址,,与cpu位数相同)

    printf("%d\n",sizeof(arr));   //输出值为20(代表整个数组,故是5*4个字节)

    printf("%d\n",sizeof(*arr));    //输出值为4(代表arr[0],其为int型)

    printf("%d\n",sizeof(array));  //输出值为7(sizeof会带字符串中的’\0’字符)

    printf("%d\n",sizeof(*array));  //输出值为1 (代表array[0],其为char型)

    printf("%d\n",sizeof(p2));     //输出值为4(为指针,代表一个地址,,与cpu位数相同,虽然该 
                                   //指针是char*类型)

    printf("%d\n",sizeof(*p2));    //输出值为1(代表array[0],其为char型)

    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值