c++ 模板函数指针赋值问题求大牛! c语言中指针赋值
关于C++函数指针和模板的问题,求大牛~
写成
template <class T, class Func>
void Test(T arr[], Func func)
{
func(arr[0], arr[1]);
}
void main()
{
char str[2][5] = { "bbb" , "aaa" } ;
Test(str, strcmp);
}
其实这种函数的写法, 你可以参照下STL的写法. 打开头文件algorithm里面尽是这些.
C语言中指针的赋值问题
指针就是地址,int i;i是一个变量,&i就是他的地址,可以说就是指针,不过是个定值,int *p,p被定义为指针,p和&i的差别在于:p是变量,你可以随意给他地址,p能指向内存任意地方【WINDOWS下与进程句柄相关】,而&i是个常量,指针变量体现了程序的灵活性,int a[4][4],a是个二级指针,a指向它下一级a[],a[]也是个指针,指向他的下一级a[][],比如a[2][3],a是首地址,即指针,a[2]是下一级指针,a[2][3]就不再是指针了,【a是二级指针】,a[2][3]相当于*(*(p+2)+3)也等价于**(p+2*4+3),需要注意的是指针在做参数时FUN(char a[][])这里就会出错,为什么呢?想想如果FUN里有句 a[2][3],FUN函数里它就无法知道a[2]该偏移多少,你需要给出偏移,FUN(char a[][4]),这样他就知道a[2]是a+2*4,很多函数都使用指针,gets(指针),scanf("%d",指针),实际printf也相当于指针,不过这是个远指针,char far *p;p=0xb8000000;*p='a';在屏幕会得到 a ,不知LZ明白没,指针在WINDOWS内核处处皆是,大量的句柄都是指针,LZ多多学习,不明加358915781
c++问题--给函数指针赋值?
首先,对于指向某个对象(如整型、字符、类实例等)的指针,其值实际上是这个对象在内存中的地址。*的作用就是取出这个地址值。
这里的转换其实和类的关系不大,或者说不需要c++的知识也应该能够理解才对。只需要明白一个书上很少提到的知识点,即含虚函数表(vtbl)的类对象,其在内存中的起始地址(我一般称为基址,如代码中的&b)处保存着一个指向vtbl的指针。用这个指针可以找到vtbl表,然后可用vtbl表中的各项(即一个个的函数指针)访问各个函数。用调试器可以很直观地看到这些关联,千万不要偷懒,如果你想学好虚函数戓虚基类。
以下解释可能不太规范,参考就好:
(int*)(&b),把指向b的基址的指针强制转换成一个int指针。
*(int*)(&b),取出int,这个int实际上是一个地址值,即vtbl指针的值。
(int*)*(int*)(&b),把int强制转换成int*。相当于把vtbl指针转为int*。
*((int*)*(int*)(&b)),再取出int,这个int实际上是vtbl表中第一个函数的函数指针,即Fun。
(Fun)*((int*)*(int*)(&b)),把int强制转换成Fun指针。从前一转换知这样是有意义的。
最后用函数指针执行函数的调用。
比较复杂,一般来说只能意会。搞懂这个,虚函数就没有什么神秘的地方了。
这里的强制转换只是语义上有所变化,值其实未做任何修改。用int*是因为指针占用内存的大小和int类型是一样的,如果用char*,只能取出一个字节,出错了
关于C语言中指针赋值的问题
指针赋值问题:
1指针如何赋值?
如 int *p,**q,a; *p=1;*p=a; **q=a; 语法正确,但是p没有指向任何地址。
因为在内存中指针分配的空间与变量分配的空间是不同的。
变量分配的是栈区(具体的) 指针分配的是堆区(按要求的)如char *p; *p='a'; *p="aaaaa" 都正确。
在计算机读取数据是是读地址后然后找到地址里面的内容。
指针p是一个存放地址的变量,他本身有地址一样能输出他的地址。
但a=1 ;*p=a 只代 p的内容为1,a的内容为1 。诺改为 a=1;p=&a ; *p=2;则p的内容为a的地址,a的内容为2
详细代码:
main()
{
int *p,a=99;
*p=a;
*p=33;
printf("%d,%d",*p,a);
}
结果:33,99 //p值变,a值不变,因为p根本没有指向a的地址,先就说了计算机是根据地址找到后读取里的内容,你只是赋值,没指地址所以没有改变。
main()
{
int *p,a=99;
p=&a;
*p=9999;
priintf("%d,%d",*p,a);
}
结果:9999,9999 //因为改变了地址,所以p的值改变则a的值也会改变,,,