C/C++ 指针使用、初始化
2015-03-31 11:51
183 查看
首先,熟悉下*和&。
*一般用在变量声明,像char * p;这样就声明了一个指针型变量,在声明的时候*靠近哪一方都行,例如:
这样都是可以的。
但如果声明多个,就要注意下书写格式:
声明之后就可以使用了。
直接使用p,其实使用的是地址,而*p就是指向这个指针型变量所指内容,如果是数组则指向第一个元素,说到这拿sizeof()举个例子:
&是取地址操作符,也是参数引用操作符,
这样就把t的地址赋值到 指针型变量p里面了,也就是说现在t 和 p 是共有。改变其中一个另一个也会变,因为两者使用的是同一地址。
而这种直接赋值方式,使用的是原型中的复制构造函数,两者之间没有直接关系,其中一方改变也不会影响另一方。
&还有一种使用就是在函数参数的引用上:
形参好处在于即使参数在函数内改变,也不会影响原地址。而实参好处是不会复制原地址副本就减少了内存使用。通常在函数声明的时候,同时加上const和&,就会既不产生复制的副本,又不会影响原地址内容:
接下来是指针变量的初始化,先以char*为例:
*一般用在变量声明,像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"); ///错误
相关文章推荐
- C++中关于指针初始化和使用NULL的理解
- C++ 指针/引用/常规/CONST型成员的初始化与使用
- C++使用未初始化的指针和赋值为0的指针
- C++中指针初始化和使用注意事项
- C++中指针初始化和使用注意事项
- C++指针使用方法解惑
- C++中指针的使用艺术
- 关于C++中函数指针的使用(包含对typedef用法的讨论)
- (转)关于C++中函数指针的使用(包含对typedef用法的讨论)
- C++指针使用方法解惑
- 使用c++的成员指针实现类似Borland VCL组件的事件回调
- C++指针使用方法解惑
- 关于C++中函数指针的使用
- c++指针和引用的使用浅谈
- [转载]c/c++指针与数组的使用与区别
- C++中使用基类指针操作子类数组的分析
- 关于对使用类实现C++指针功能性能打折扣的反驳
- 关于C++中函数指针的使用(包含对typedef用法的讨论)
- C++指针使用方法(转)
- c++中函数指针的使用方法