C/C++ 指针使用、初始化

     首先,熟悉下*和&。

    

        *一般用在变量声明,像char * p;这样就声明了一个指针型变量,在声明的时候*靠近哪一方都行,例如:

char* p;
char *p;
char*p;

        这样都是可以的。

        但如果声明多个,就要注意下书写格式:

char *p,*k,*u;。

        声明之后就可以使用了。

        直接使用p,其实使用的是地址,而*p就是指向这个指针型变量所指内容,如果是数组则指向第一个元素,说到这拿sizeof()举个例子:

char *p="12345";
char b[]="12345";
printf("%d,%d,%d",sizeof(p),sizeof(*p),sizeof(b));

//返回结果   4,1,6
// sizeof(p) 取到的是数组首位1的地址,所以是4
// sizeof(*p) 取到的是数组首位,所以是1
// sizeof(b) 取到的才是整个数组,加上结束符0,所以是6
// char* 需要用strlen()才能取到整个数组的大小


     

        &是取地址操作符,也是参数引用操作符,

char t='a';
char *p=&t;

        这样就把t的地址赋值到 指针型变量p里面了,也就是说现在t 和 p 是共有。改变其中一个另一个也会变,因为两者使用的是同一地址。

char t='a';
char y='b';
t=y;

        而这种直接赋值方式,使用的是原型中的复制构造函数,两者之间没有直接关系,其中一方改变也不会影响另一方。

        &还有一种使用就是在函数参数的引用上:

      

int(&) sub(int(&)arg1,int(&) arg2)
{
      return (arg1-arg2);
}
        在参数声明时加上&,其实就是实参和形参的区别。加上&之后会把原地址内容作为引用,而不加&会调用原型构造函数复制一份,再进行传递。

        形参好处在于即使参数在函数内改变,也不会影响原地址。而实参好处是不会复制原地址副本就减少了内存使用。通常在函数声明的时候,同时加上const和&,就会既不产生复制的副本,又不会影响原地址内容:

const int& sub(const int& a1,const int& a2)
{
	return a1-a2;
};


        接下来是指针变量的初始化,先以char*为例:

char *p1;   /// 这只是声明了一个char指针,没有初始化不能使用。
char *p2=new char[_MAX_PATH]; /// 声明并且初始化了一个大小_MAX_PATH的char指针,指针可变,内容可变。
char *p3="12345";   /// 声明了一个char指针,并把它指向常量"12345",内容是不可改变的。但是可以继续指向其他地址
const char *p4; ///常量内容,非常量指针,指针可变 
char* const p5=new char[_MAX_PATH]; /// 常量指针,非常量内容,内容可变
const char* const p6=new char[_MAX_PATH]; /// 常量指针,常量内容,都不可变
p1="34567";     /// 正确
p1=p3;          /// 正确
p3="56789";     /// 正确
p4="76543";     /// 正确
strcpy(p2,"11115"); ///正确
strcpy(p5,"12225"); ///正确
strcpy(p4,"13335"); ///错误
strcpy(p3,"14445"); ///错误
strcpy(p1,"15555"); ///错误



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值