1,怎么理解C语言里的指针指针类似于是电脑里面的“桌面快捷方式”,指向了实际的文件内容快捷方式(指针)指向了文件(变量)的地址 。当快捷方式(指针)里面的内容(值)变化的时候,文件(变量)的内容(值)也跟着变化 。当单独删除快捷方式(指针)的时候,文件(变量)仍然存在 , 并没有因此而删除【c语言怎么定义指针,怎么理解C语言里的指针】
2 , c语言 指针1、数组a[3][3]在内存中是这样的a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]a[2][0]a[2][1]a[2][2]2、a是整个数组的首地址,你想要那行那列的数据 , 就加多少就是了3、数组a[m][n]中,如果编译器按行存储,第i行第j列的地址=a+(i-1)*n+(j-1)如果编译器按列存储,第i行第j列的地址=a+(j-1)*m+(i-1)一般是按行存储的
3,C语言字符型数组的指针怎么定义char *p;p = (char *)a;p = (char *)&a;p = a[0];p = &a[0][0];p = (char *)&a[0];本人亲测,以上五种情况p都是指向a的首地址 。char A[10][10]char (*pArr10)[10]; pArr10 = A; //或者 pArr10= &A[0] ;char B[10]; char *p; p = B;//或者 p = &B[0] ;#include int main() { char *p[10]; int i; p=(char*)malloc(sizeof(char)*10); for(i=0;i<10;i++) gets(p); free(p); return 0; }char a[10][10];char (*p)[10]=&a[0];之后,p[0]指向a[0]行p[1]指向a[1]行.......
4,如何定义一个函数指针C语言的方式:<返回值数据类型>* 函数名(形参列表)函数功能语句;return&返回值;}针对你的: void kk(void) { cout < < "kk " < <endl; } 或其相同原型的函数作如下声明: typedef void(*FuncKk)(void);//FuncKk是这一原型函数的指针类型; 这样你可以在你的程序中如下: int main() { FuncKk _pfunc = kk;//定义一个FuncKk型的函数指针并初始化; _pfunc();//用该函数指针调用kk函数 _PAUSE; return 0; } 上述程序行为良好,体现出标准的函数指针使用方法,即使用typedef声明函数指针的类型而不是函数指针变量,好处是一处声明,到处都可以使用而避免多次使用函数指针冗长的语法,还有typedef固有的灵活性 。针对你的: void kk(void) { cout < < "kk " < <endl; } 或其相同原型的函数作如下声明: typedef void(*FuncKk)(void);//FuncKk是这一原型函数的指针类型; 这样你可以在你的程序中如下: int main() { FuncKk _pfunc = kk;//定义一个FuncKk型的函数指针并初始化; _pfunc();//用该函数指针调用kk函数 _PAUSE; return 0; } 上述程序行为良好,体现出标准的函数指针使用方法,即使用typedef声明函数指针的类型而不是函数指针变量,好处是一处声明,到处都可以使用而避免多次使用函数指针冗长的语法,还有typedef固有的灵活性 。5,C语言函数指针定义在最上面加一句这样的定义typedef void*(*pFn)();pFn可以这样理解:首先pFn是一个指针,指针指向一个函数(或者说pFn是一个函数指针),此函数返回一个无类型的指针 。最终定义的变量及函数都是指针罢了,不过是指针的类型不同 。所以在编译时会有警告,说指针类型不匹配 。但对于程序来讲,都是可以在特定的上下文中使用的 。运行结果是t1,t2交替出现 。其实void也可以换为其它的类型如int, double等 又想到一个很好的办法:这次编译不会有警告,运行也不会出错 。示例代码如下所示#include long t1();long t2();int main(){long(*fn)()= (long (*)()) t1 ;while(1){fn = (long (*)()) fn();}}long t1(){printf("t1\n");return (long)t2 ;}long t2(){printf("t2\n");return (long)t1 ;}在最上面加一句这样的定义 typedef void*(*pFn)(); pFn可以这样理解:首先pFn是一个指针,指针指向一个函数(或者说pFn是一个函数指针),此函数返回一个无类型的指针 。最终定义的变量及函数都是指针罢了 , 不过是指针的类型不同 。所以在编译时会有警告 , 说指针类型不匹配 。但对于程序来讲,都是可以在特定的上下文中使用的 。运行结果是 t1,t2交替出现 。其实void也可以换为其它的类型如int, double等又想到一个很好的办法: 这次编译不会有警告,运行也不会出错 。示例代码如下所示 #include <stdio.h>long t1(); long t2();int main() {long(*fn)()= (long (*)()) t1 ;while(1){fn = (long (*)()) fn();} }long t1() {printf("t1");return (long)t2 ; }long t2() {printf("t2");return (long)t1 ; }汗,我怎么知道?
推荐阅读
- 珠峰大本营海拔,珠穆朗玛峰大本营海拔多少
- mysql 一行变多行 mysql一行转多行
- 新讯,新讯销量如何
- mysql新增字段在某个字段后 mysql新增一个字段怎么设置
- iphone5c,iphone5C是什么
- 腾讯电脑管家怎样设置BitDefender查杀引擎,我笔记本电脑的蓝牙和我BitDefender防火墙冲突怎么办?
- 小米pro
- vivox9什么时候上市的
- 腾讯视频怎么登录别人的会员