笔记 指针(2)

1.函数返回变量的地址

变量的生存期不受函数的影响就可以返回它的地址。

int fun(int* ip)
{
	if(ip=!NULL)
		{
			*ip=100;
		}
		return ip;
}

int main()
{
	int a = 10;
	int* p = &a;
	int* s = NULL;
	s = fun(p);

	printf("%d\n", *s);//100

}

2.类型指针+1的限制

struct Student
{
	char s_id[20];
	char s_name[20];
	char s_sex[10];
	int s_age;
};
int main()
{
	char* cp = NULL;
	int* ip = NULL;
	double* dp = NULL;
	int** s = NULL;
	struct Student* stp = NULL;
	
	printf("cp : size %d\n", sizeof(cp));//4
	printf("ip : size %d\n", sizeof(ip));//4
	printf("dp : size %d\n", sizeof(dp));//4
	printf("s : size %d\n", sizeof(s));//4
	printf("stp : size %d\n", sizeof(stp));//4

	return 0;

}

无论什么类型,指针变量大小为四字节。

那么类型对指针有什么作用呢,根据指针类型的不同,+1时也不同,类型占的字节数越多,地址增加的就越快。

typename *p = &ar[0]

p = p+1;

p = p + sizeof(typename)*1

int型 加了四字节

#define N 5
int main()
{
	int ar[N] = { 1,2,3,4,5 };
	int* ip = &ar[0];
	for (int i=0;i<N;i++)
	{
		printf("%p=>%d\n", ip, *ip);
		ip = ip + 1;//加了四字节
	}

	return 0;
}

double型 加了八字节

#define N 5
int main()
{
	double ar[N] = { 1.1,2.1,3.1,4.1,5.1 };
	double* ip = &ar[0];
	for (int i = 0; i < N; i++)
	{
		printf("%p=>%f\n", ip, *ip);
		ip = ip + 1;//加了8字节
	}

	return 0;
}

char型 加了一字节

#define N 5
int main()
{
	char ar[N] = { 't','u','l','u','n'};
	char* ip = &ar[0];
	for (int i = 0; i < N; i++)
	{
		printf("%p=>%f\n", ip, *ip);
		ip = ip + 1;//加了1字节
	}

	return 0;
}

3.取值和自增运算符的结合

#define N 5
int main()
{
    int ar[N] = { 12,23,34,45,56 };
    int* p = &ar[0];
    int x = 0, y = 0;
    x = *p++;
    y = *p;
    printf("x: %d y: %d", x, y);//12,23

    x = ++*p;
    y = *p;
    printf("x: %d y: %d", x, y);//24,24

    x = *p++;
    y = *p;
    printf("x: %d y: %d", x, y);//34,34

    return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值