初学指针

int a = 10;                                           整型变量保存整型值                         int a,&a->int *
char b = 'a';                                        字符变量保存字符值                          char b,&b->char *
double c = 23.5;                                 浮点变量保存浮点值                          double c,&c->double *

int *p = &a;(int *p;p=&a;)             整型地址变量保存整型地址值            int *p,&p->int **    

1、指针==地址

2、获取变量地址:&变量名

3、*指针变量名:间接访问(解引用)到指针指向的变量,即指针变量只比普通变量多一个解引用的过程

int main()
{
int a = 10;
int b = 20;
int *p = &a;                   //定义指针p并将a的地址赋值给p,等价于(int *p;p=&a;)   
*p = 100;                       //对p进行解引用返回到a,并将数字100赋值给a,等价于a = 100;
p = &b;                         //将b的地址重新赋值给指针变量p
*p = 200;                       //对p进行解引用返回到b,并将数字200赋值给a,等价于b = 200;
int **pp = &p;               //定义一个二级指针变量pp,将指针变量p的地址赋值给二级指针pp
*pp = &a;                      //将指针a的地址重新赋值给二级指针pp,等价于p=&a;
**pp = 1000;                 //对二级指针pp进行解引用返回到指针p,再对一级指针p解引用返回到a,并将数字1000赋值给                                                       a,等价于*p = 1000;a=1000;
*pp = &b;                      //将指针b的地址重新赋值给二级指针pp,p = &b;

**pp = 2000;                 //对二级指针pp进行解引用返回到指针p,再对一级指针p解引用返回到b,并将数字2000赋值给                                                      b,等价于*p = 2000;b =2000;

//int *q; pp = &q; pp = &a;        //error 二级指针pp的使用未解引用,

return 0;
}

4、同类型指针方可相进行赋值操作

       char a;

int *p = &a;              //int *p = char *  指针p为整型指针变量,a为字符型变量,不为同一变量,无法进行赋值操作

int a;

char *p1 = &a;         //char *p1=int *  指针p1为字符型指针变量,a为整型变量,不为同一变量,无法进行赋值操作

int a;
int *p = &a;
int **p2 = &a;          //int **p2 = int *;  指针p、p2为整型指针变量,a为整型变量,为同类型变量可以正常进行赋值操作
 

 

5、指针大小:

x86 || 32位平台,指针大小为4字节

x64 || 64位平台,指针大小为8字节

void Show(int arr[10])//数组已经退化成指针
{
printf("%d\n",sizeof(arr));
}
int main()
{
printf("%d\n",sizeof(char*));                
printf("%d\n",sizeof(short*));
printf("%d\n",sizeof(int*));
printf("%d\n",sizeof(long*));
printf("%d\n",sizeof(long long*));
printf("%d\n",sizeof(float*));
printf("%d\n",sizeof(double*));
printf("%d\n",sizeof(double**));
printf("%d\n",sizeof(double**********));
int arr[10] = {1,2};
printf("%d\n",sizeof(arr));
Show(arr);
        return 0;

}

//指针基本类型包含char、short、int、long、long long、float、double等,在x86 || 32位平台下指针大小均为四个字节

//数组名作为函数的参数被调用时会使数组退化为指针

//整型数组arr[10]包含十个整型变量,一个整型变量含四个字节,因此数组arr包含四十个字节,Show函数调用arr数组使arr数组退化为指针,在x86 || 32位平台下,指针大小为4字节,因此指针arr包含四个字节,

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值