C/C++ 指针使用、初始化
来源:互联网 发布:java中断机制 编辑:程序博客网 时间:2024/05/17 09:11
首先,熟悉下*和&。
*一般用在变量声明,像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 *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 0
- C/C++ 指针使用、初始化
- 【C/C++】指针初始化
- C指针初始化
- C语言 字符串指针初始化
- C/C++中指针初始化
- C语言指针的初始化和赋值
- C语言指针的初始化和赋值
- C语言指针的初始化和赋值
- C语言指针的初始化和赋值
- C语言指针的初始化和赋值
- c语言结构体指针初始化
- 【C语言学习】指针的初始化
- C语言指针的初始化和赋值
- C指针的初始化与赋值
- C/C++中字符指针初始化问题
- C/C++ 二维指针 矩阵 初始化
- c语言结构体指针初始化
- c语言指针的初始化赋值
- 十七、Linux系统编程-信号(四)信号在内核中表示、信号的阻塞和未决
- 怎么把PDF转换成PPT进行编辑
- C++常用字符串分割方法实例汇总
- 程序员的大侠情节
- 如何查找公共网的Ip地址
- C/C++ 指针使用、初始化
- Android Google IO之Volley
- Soga
- 第四周上机实践项目1-三角形类的构造函数(带参数构造函数)
- 程序员必须知道的十大算法
- ubuntu 10.10环境下编译openwrt(添加Luci和中文化)笔记
- spring 中@ModelAttribute绑定变量中文乱码的解决办法
- hibernate+spring创建sessionFactory自动扫描类报错Unable to instantiate default tuplizer
- HTML5吃豆豆游戏开发实战(二)主角移动和动画循环设置