c++ 指针代码全详解

#include<cstdio>
#include <iostream>
using namespace std;
#include<cstdio>
struct student    //struct 不声明都是public 与class相反
{
	int snum;   //定义
	int age, grade; //定义
};
student T; //声明
student *pt;

int main()
{
	int *p, *q;   //定义了一个指针和一个普通变量
	int *c[10];  //声明一个有十个指针(p[0],p[1],p[2],…,p[9])的数组,每个元素都是一个指针
	int a;
	p = &a;   //普通变量指针一个指针等于 a的内存地址 &指内存地址
	a = 10;
	printf("1 %d\n", *p); // *p 等于p指针内存地址等于a内存地址 一个变量的地址永远不会变
	a = 15;
	printf("1 %d\n", *p);//*p 等于p指针内存地址等于a内存地址 一个变量的地址永远不会变
	a = 1;
	p = &a;   //普通变量指针一个指针等于 a的内存地址 &指内存地址      
	q = p + 1;         //内存地址加1 等于后移4个字节
	printf("2  %p %p \n", p, q); //%p 输出字节  q多了4因为int类型是4个字节,所以加int类型的1会往后移4个字节。
	printf("2  %d \n %d", *p, *q);  //*p  等于p指针内存地址等于a内存地址 一个变量的地址永远不会变



	printf("\n ==========  指针数组    ======= \n");
	int b[10] = { 0,2,4,6,8,10,12,14,16,18 };   //需要指定指针类型  数组,每个元素都是一个指针 
											//(a前面定义了为不是指针,不可用a,改成了b)
//	int *p;              
	for (p = &b[0]; p<&b[0] + 4; p++)    //p = &a[0] 初始化值 (a前面定义了为不是指针,不可用a,改成了b)
		                                // p<&a[0] + 4 小于4继续循环
										//p++   内存地址加1(后移4个字节)
		printf("\n %d ", *p);


	printf("\n ==========  指针数组2    ======= \n");

	//p = b;
	/p最后一次p++等于p[4]=8
	printf("%d\n", *b);   //0    数事实上,数组你可以看成一个指针
	printf("%d\n", *(b + 1));// 2  b[1]=2  b[5]=10   注意加括号了
	printf("%d\n", *p); //8    
	printf("%d\n", *(++p)); //10    内存地址加1(后移4个字节)


	printf("\n ==========  指针数组2.1    ======= \n");
	p = b;      //用作b重新赋值给p指针
	printf("%d\n", *b);   //0    数事实上,数组你可以看成一个指针
	printf("%d\n", *(b + 1));// 2  b[1]=2  b[5]=10   注意加括号了
	printf("%d\n", *p); //0    
	printf("%d\n", *(++p)); //2    内存地址加1(后移4个字节)

	printf("\n ==========  结构体指针 说明    ======= \n");
	pt = &T;  //普通变量指针一个指针等于 T的内存地址 &指内存地址 T调用函数student
	T.snum = 15;
	T.age = 12;
	T.grade = 90;
	printf("%d\n", (*pt).snum); // 括起来,就可以当该指针指向的结构体用了
	printf("%d\n", pt->age); // ->等同.  这里等同T.age
	printf("%d\n", T.grade);

	printf("\n ==========  多重指针 说明    ======= \n");
	int **pp, *qa;//p就是指向一个指针的指针,q是指向一个普通变量的指针
	int aa;
	aa = 1;
	qa = &aa;
	pp = &qa;
	printf("%p  %p  %p  %p\n", pp, *pp, qa, &aa);   //打印内存地址
	printf("%d  %d  %d", **pp, *qa, aa);



	system("pause");
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

追光叶子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值