c语言如何定义指针,怎么理解C语言里的指针

1,怎么理解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)一般是按行存储的【c语言如何定义指针,怎么理解C语言里的指针】
3,C语言指针的定义指针就是地址 。你说的是指针变量 。整形变量,浮点变量,字符变量 , 指针变量 。通过起名的规律就知道指针变量是储存地址的 。指针变量和其他变量的用法一样,作用域一样 。在一个子涵数中定义指针变量,是局部变量 , 其他函数是不能用的 。不要把指针变量想的太复杂,地址(指针)也是数据,和其他字符数据,整形数据一样,没什么差异 。当然 , 全局变量的指针变量当然可以多函数使用 。指针的定义:地址 。指针变量的定义:存储指针的变量 。这个是c语言的复杂类型声明: char (*ptr)[5] ptr是一个指针,其指向一个数组,此数组有5个元素 , 每一个元素都是char类型 。int *fip() fip是一个函数,此函数的返回值是指向int类型的指针 。int (*pti)() pti是一个指针,其指向一个函数,此函数没有参数,并且此函数的返回值是int类型 。
4,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]行.......5,如何定义一个函数指针针对你的: 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固有的灵活性 。C语言的方式:<返回值数据类型>* 函数名(形参列表)函数功能语句;return&返回值;}

    推荐阅读