c++ | 指针小结 | 再也不要怕指针!

初学者,真的会很怕,指针!一个是大学老师,讲过慎用指针,指针直接操作内存,稍不处理好就容易造成野指针(应该说是没有在结束指针作用的时候,释放指针指向的资源),另一个是,呵呵呵 很多资料自己都没搞懂(透彻的那种)就直接来出书,关键还上了教材。首选 那本 c++ 字典!!!

#指针,是变量,占资源(空间),要好好区分引用。指针是变量,那它是什么类型的变量? 指针可以表示 “万物”类型, 可以侧面佐证,指针直接操作内存,而内存本就可以存储“万物”,所以去掌握并吃透 c++ 内存 很重要,内存,通过地址进行操作。这个可以参考操作系统。什么地址表啊、地址越界啊、内存分布啊

#说回指针,指针,表示一个地址,“万物”都可以用地址表示,如字符、字符串、整数、结构体、函数……


########################################

#但是很多时候,并不只是简单,把指针当作一个表示,更多的还要把指针带入计算操作。
#如 
#举例,enbase64 
char* xxx = new char[100]
int aSize = EncodeBase64(pSrc,xxx, len);// 然后函数体中 的pDst 就是 传入的 指针 xxx
	    *pDst++ = EnBase64Tab[c1 >> 2];
        *pDst++ = EnBase64Tab[((c1 << 4) | (c2 >> 4)) & 0x3f];
        *pDst++ = EnBase64Tab[((c2 << 2) | (c3 >> 6)) & 0x3f];
        *pDst++ = EnBase64Tab[c3 & 0x3f];
#最后需要  pDst 保存的  最后结果(字符串)的地址  (而在运行中又不断对该变量进行操作)        

#所以 ,再传值给函数的时候,就需要开辟一定空间(多大的空间,看需要储存多长的字符串)
#最后调用结果 字符串,直接调用该指针变量就可以,这样 这个指针的作用就结束(生命周期),接着,就要释放空间(如果是智能指针,可以不需要手动操作这一步)
delete[] xxx;
xxx = nullptr;	//尽管c++11 以后 NULL == nullptr

#错误传值,  形如
char* xxx;
int aSize = EncodeBase64(pSrc,xxx, len);
.....
xxx = nullptr;

#xxx 就只是一个空的地址 变量,那传给函数,一个内配分配空间大小的空地址,是不能从充当一个载体去存储 一个字符串 内容。(但话说回来,正确的做法,应该是传入一个已经分配一定空间的指针(地址变量)(牵引车头拉一个空车厢去函数仓库装货物去了,而不是错误例子,牵引车头不加空车厢去函数仓库装货物,连空车厢度没有装个锤子啊!)
写道这里,应该也能更好的理解指针了吧,这才是指针的精髓,不要怕!


你可能感兴趣的:(C++,综合部,c++,java,开发语言)