1楼:千锋教育
不可移植。c 中没有一般的指针的指针类型。void* 可以用作一般指针只是因为当它和其它类型相互赋值的时候, 如果需要, 它可以自动转换成其它类型; 但是, 如果试图这样转换所指类型为 void* 之外的类型的 void** 指针时, 这个转换不能完成。
使用“指针”进行函数参数传递有何特点?
2楼:兄弟连教育北京总校
首先你要认识函数传参是怎么进行的
函数传参是复制形的,举个例子说:
void modify(int a)
void main()
这个程序的答案还是5。为什么?
因为当调用modify(a)时,在执行modify函数时,是另外开辟了一个内存空间,将main中a的值复制过来,modify函数中所有的操作都是相对于这个新开辟的内存空间而言的,对原来的a没有任何改变。
现在就来说说指针,如果用指针传参的话那就完全不一样了,指针(pointer),说白了即是指向变量内存地址。同样上面的例子:
void modify(int * a)
void main()
这个答案当然是6
因为你传进去的是a的地址,所以在modify函数中的操作都是对a地址上的内容进行操作,即是操作a所以modify函数不用返回这个数,main中a的值也会改变。因为大家都是操作同一个内存空间,而上面不用指针,modify操作的是另一个新开辟的内存空间,只是这个内存空间初始值和a一样。
现在来说说传参,其实你“为什么函数参数是字符串的多用指针?” 那句我不是很明白,c中的字符串传参好像就指针一种形式(除非用结构体)。
何时用指针,何时用拷贝。当传的参数是一个结构体,而这个结构体比较大,这时最好用指针,因为如果用拷贝的话,单单花在拷贝的时间就要浪费很多,而如果这个函数经常被调用,那么这效率问题就出现了。
你在子函数中要对你的主调用函数中变量进行操作时也可以用指针做参数,这样子函数就可以不用return 如果不是用指针的话,就要再子函数的未尾加上一条return x;把这个数返回当返回值。
多看点书,多写点程序,刚开始学都会对指针比较迷茫。写多了,自然而然就懂了。
c++为何无法用指针引用这些派生类成员函数
3楼:匿名用户
**没有问题,我将你的**在vs2010下创建了个测试项目,仅仅把你的虚函数名改成输出的,完全没有问题,我认为是编译器差异造成的,。
4楼:育知同创教育
参考下面**
#include
using namespace std;
struct param;
struct circleparam:public param;
class point
virtual void print()
c++类的对象和类的指针的区别,指针和引用的区别
5楼:千锋教育
c++ 对象是类的示例,当定义一个类的时候,系统是不为这个类分配空间的,只有当定义类的对象的时候才会分配空间,类的对象实际上就是类空间的引用。指针是用来存储变量的地址。
为什么不能对 void* 指针进行运算?
6楼:千锋教育
编译器不知道所指对象的大小。在作运算之前, 把指针转化为 char * 或准备操作的其它指针类型。
一个关于字符指针的问题,一个关于strcpy函数的问题
7楼:千锋教育
1,当为指针分配了空间没有初始化值时,内存里的值是不确定的,所以是无效的字符串
2,str = new char[20]后str指针就指向了一块大小为20的堆内存,这时候是可以把str2的内容复制到这块内存上去的,str="1234"执行后str指针指向字符串常量,字符串常量存在静态内存区是不可修改的一块内存,所以执行strcpy_s函数会报错