2016年06月08日学习日记c语言指针

2016年06月08日学习日记c语言指针
int num=10;//普通变量
int *p=#//一指针(值:变量的地址)
int **q=&p;//二维指针(值:一定是一维指针的地址)
int ***s=&q;//三维指针(值:一定是二维指针的地址)
printf(“num=%d\n”,num);
printf(“p=%d\n”,*p);
printf(“q=%d\n”,**q);
printf(“s=%d\n”,***s);

数组
数组明就是一个指向数组首元素的‘指针’
指针就是数组 数组就是指针

数组名是一个指针常量,指针值不能发生改变
array=&array[1]//error 指针的值不能改变
使用数组名做+几(指针向后移动)-几(指针向前移动)操作
例1:

#include "stdio.h"
int main()
{
    int a[]={0,2,4,6,8};
    int *p[5]={a,a+1,a+2,a+3,a+4};
    int **pp=p;

    printf("%d\n",**pp++);
    printf("%ld\n",*pp-a);
    printf("%d\n",**++pp);
    printf("%ld\n",pp-p);
    return 0;
}//地址减地址 %ld

运行结果:0 1 4 2
例2:

#include "stdio.h"
int main()
{
    char a='1';//97
    char b='c';
    char c='f';//102

    char *p1=&a;
    char *p2=&b;
    char *p3=&c;

    char *arr[3]={p1,p2,p3};
    **(arr+1)='5';
    printf("p3=%c\n",*p2);
    printf("%d\n",*arr[2]-*arr[0]);//102-37=53 字符先隐式转换为整型(ascii码)再进行运算
    return 0;
}

运行结果:

p3=5
53

指针运算
int array[3]
int num=(&array[2])-(&array[0]);//结果是偏移量 不是8(大小) 只能相减 不能相加相乘等等
printf(“%d”,num);//正确结果为2

指针数组:数组中所有元素都是指针
int num1=1;
int num2=2;
int array[5]={&num1,&num2};指针数组(数组中存储的都是指针比如这里的int *)

数组指针:指针指向一个数组 int (*p)[10]

#include "stdio.h"
void func1(int *x)
{
    int z=10;
    x=&z;//改变指针指向
    printf("x=%p=%d\n",x,z);//0fkaf00
}
void func2(int *x1,int num)
{
    x1=#//num和主函数number不是同一块地址
    printf("x1=%p=%d\n",x1,num);//0x7fff5fbff7e4
}
void func3(int **x)
{
    **x =1;
}
int main()
{
    int number=100;
    int *p=&number;
    int **pp=&p;
    printf("func1:%p=%d\n",p,number);
    func1(p);
    printf("func2:%p=%d\n",p,number);
    func2(p, number);
    printf("func3:%p=%d\n",p,number);
    printf("number=%d\n",number);
    func3(pp);
    printf("func3:number=%d\n",number);
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值