游戏开发 c++基础学习 笔记摘要第12天

指针

指针:地址,是一种数据类型
概念:为了方便访问内存中的内容,系统给每一个内存单元(字节)一个编号,该编号就是地址,也就是指针
内存大小:4个字节
地址是16进制的无符号整型

*&a//相当于a
&*pa//相当于pa,但根据右结合性,pa必须为指针
int *paa=&arr[0];
int *pab=&arr[3];
cout<<pab-paa<<endl;//3 表明相差3个元素  两个指针可以相减,但不能相加
//相差12个字节,因为类型为int型,所以输出为3
paa++//正确
arr++//错误,arr表示数组首地址是常量,不能自增自减

关系运算

p1>p2//表示p1处于高地址位置

const形参和实参
当使用实参初始化形参时,会忽略掉顶层const

void fan(const int i)//fan能读取i,但不能向i写值
//调用fan函数,既可以传入const int 也可以传入 int

-----------------------分割线-------------------------------------------------

int main()
{
	int a[4]={1,2,3,4};
	int *ptr(int *)(&a+1);
	printf("%d",*(ptr-1));//4
	//ptr为int型指针  &a为首地址  &a+1表达的是首地址再加上指针类型所占字节数也就是4 所以指向数组尾元素的下一个位置,
	//*(ptr-1)也就是a[3]也就是4
}

int *ptr[n]和int (*ptr)[n]区别
1.int( *ptr)[n]:ptr是指向数组的指针,指向的返回类型为int,所以ptr是一个指向整型数组的指针,即数组指针
2.int *ptr[n]:ptr是一个由整型指针的数组组成,数组里面的每一个元素都是整型指针,即指针数组

void* fun(char *arr)
{
	char *arr2="world";
	arr=arr2;
	return arr;
}
	int main()
	{
		char *ch="hello";
		fun(ch);
		cout<<ch<<endl;
		return 0;//hello
	}//arr属于形参,属于局部变量,作用只在fun函数内,调用函数后,arr就被释放了,所以实参ch指向仍然不会改变,所以仍然输出hello
int pstr(char str[])
{
	return (int)(sizeof(str)-1);
}
void main()
{	
	char a[20]="hello world";
	printf("%d",pstr(a));
}//当函数传递数组指针时,自动退化为指针,而指针长度为4,再减去1,所以输出为3

不能将指针赋值给数组名变量,数组一旦创建之后,数组名一定为该数组首地址,是不变的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值