怎样定义一个指针,如何定义指针

1,如何定义指针各类指针定义类型* 名字 比如说int* a;char* b;double* c;如果要初始化,可以这样int* a=NULL;int *p;char *ps=new char[10];int *p = (int *)malloc(sizeof(int)*10);基类型*变量如:float*a这样就可以用a来表示一个实数的地址定义指向函数的指针变量一般形式:类型标示符(*指针变量名)();例:int (*p)float (*p)
2,C语言指针看书指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址 。要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型 , 指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区 。我们一起学习好吗?交流才能会的多一些的 , 我也学到指针,也不懂,有点难 , 迎难而上,加油我简单的给你说下指针吧 指针的定义 Ex: /*1*/int * p; int a; p=&a; /*2*/ int a, int * p=&a; //指针初始化 /*指针是存放地址的变量,在定义当中*p是为了说明p是指针 , 无其他意义,而在使用时若出现*p则为去取容运算符,这是我对指针的理解,呵呵,我也学了不久,加群67546170一起交流吧 , 欢迎哦O(∩_∩)O~*/你把QQ告诉我,我给你传一本书指针就是一个用于存放变量地址的特殊变量,可以改变它的值,也可以改变他指向的变量的值,比如你要顺序把处理的值保存到一个数组 int buf[64]里面,你就可以定义一个指针int *p;p = &buf[0];i = 64;while(i--) *p++ = func();当指针里面存放的是指针变量的地址,这时就叫做指向指针的指针long **p;long *p1;long k;p1 = &k;p = &p1;指针可以指向数,也可以指向数据结构,也可以指向函数......【怎样定义一个指针,如何定义指针】
3,如何定义一个函数指针针对你的: 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&返回值;}
4,关于定义指针请教楼主问问题比较多,我只说下我的看法 。(1)声明 int **p;变量p是一个指针,而它所指向的类型是一个整型指针,这样就定义了一个指向指针的指针 。而int *q;变量q是一个指针,它所指向的类型是一个整型,所以不能用来定义一个指向指针的指针 。q的值是一个地址,而*q表示的是q所指向的地址中的值 。(2)*q是一个值而不是一个地址 。(3)多嵌套一层 , 应该是要多加一个* 。其实*表示的是取变量所指向的地址存储的数值 。(4)指针变量的地址和普通变量的地址是相同的 。使用指针更加灵活 。这个你使用多了就知道了 。(5)可以用整型变量来装地址,理由跟你说得差不多,但是一般不这么用 。这里我写的程序,你看看,希望对你有帮助 。#include <stdio.h>int main() int **p, *q, k=10;#if 0 q = &k; p = &q; printf("%d\n",**p);#endif#if 1 // 初始化指针,如果不初始化后面将出错 。q = (int *)malloc(sizeof(int *)); p = (int **)malloc(sizeof(int **)); *p = (int *)malloc(sizeof(int *)); *q = k; **p = *q; printf("%d\n",**p); // 分配了地址,记得及时释放 。free(q); free(*p); free(p);#endif return 0;}洁净,泛现荣光 。地面虽然尚有湿漉漉,是的,你自己定义的是几重指针 , 必须自己很清楚,编译器只判断你使用时是否合法 。你不知道嵌套几层就没法用,这就是C的规则,必须遵循 。另外通常指针最多用到三重,一般不会再高了 。你要去你朋友的朋友家,你得先找你朋友,你朋友再去找他那个朋友 。你要问为什么我不能和我要找的那个人成为朋友 , 因为程序很大,如同现实生活一样,你不可能和所有人成为朋友 。要了解一个知识最好的方法是去用它而不是想它 。你又问“我是不是要提前知道这个指针是多少层的”,当你用一个三层的指针时,你肯定是要用它指向二层的指针,这个二层的指针或许是你函数的参数,总之它就在你周围 。就是要想实现在ndk中的通过jni技术定义一个接口,就是现在不知道如何在java中的定义这个jni接口方法?public native 如果定义,才可以实现这个接口?就是unsinged char* , 在java中要如何定义了?5,如何定义指针函数 为什么要这样 讲具体点int p; //这是一个普通的整型变量int *p; //首先从P 处开始,先与*结合,所以说明P 是一//个指针,然后再与int 结合,说明指针所指向//的内容的类型为int 型.所以P 是一个返回整//型数据的指针int p[3]; //首先从P 处开始,先与[]结合,说明P 是一个数//组,然后与int 结合,说明数组里的元素是整//型的,所以P 是一个由整型数据组成的数组int *p[3]; //首先从P 处开始,先与[]结合,因为其优先级//比*高,所以P 是一个数组,然后再与*结合,说明//数组里的元素是指针类型,然后再与int 结合,//说明指针所指向的内容的类型是整型的,所以//P 是一个由返回整型数据的指针所组成的数组int (*p)[3]; //首先从P 处开始,先与*结合,说明P 是一个指针//然后再与[]结合(与"()"这步可以忽略,只是为//了改变优先级),说明指针所指向的内容是一个//数组,然后再与int 结合,说明数组里的元素是//整型的.所以P 是一个指向由整型数据组成的数//组的指针int **p; //首先从P 开始,先与*结合,说是P 是一个指针,然//后再与*结合,说明指针所指向的元素是指针,然//后再与int 结合,说明该指针所指向的元素是整//型数据.由于二级指针以及更高级的指针极少用//在复杂的类型中,所以后面更复杂的类型我们就//不考虑多级指针了,最多只考虑一级指针.int p(int); //从P 处起,先与()结合,说明P 是一个函数,然后进入//()里分析,说明该函数有一个整型变量的参数//然后再与外面的int 结合,说明函数的返回值是//一个整型数据Int (*p)(int); //从P 处开始,先与指针结合,说明P 是一个指针,然后与//()结合,说明指针指向的是一个函数,然后再与()里的//int 结合,说明函数有一个int 型的参数,再与最外层的//int 结合,说明函数的返回类型是整型,所以P 是一个指//向有一个整型参数且返回类型为整型的函数的指针int *(*p(int))[3]; //可以先跳过,不看这个类型,过于复杂//从P 开始,先与()结合,说明P 是一个函数,然后进//入()里面,与int 结合,说明函数有一个整型变量//参数,然后再与外面的*结合,说明函数返回的是//一个指针,,然后到最外面一层,先与[]结合,说明//返回的指针指向的是一个数组,然后再与*结合,说//明数组里的元素是指针,然后再与int 结合,说明指//针指向的内容是整型数据.所以P 是一个参数为一个//整数据且返回一个指向由整型指针变量组成的数组//的指针变量的函数.指针和函数的关系可以把一个指针声明成为一个指向函数的指针 。int fun1(char *,int);int (*pfun1)(char *,int);pfun1=fun1;int a=(*pfun1)("abcdefg",7); //通过函数指针调用函数 。可以把指针作为函数的形参 。在函数调用语句中,可以用指针表达式来作为实参 。例十四:int fun(char *);inta;char str[]="abcdefghijklmn";a=fun(str);int fun(char *s)int num=0;for(int i=0;;)num+=*s;s++;}return num;}这个例子中的函数fun 统计一个字符串中各个字符的ASCII 码值之和 。前面说了,数组的名字也是一个指针 。在函数调用中 , 当把str作为实参传递给形参s 后,实际是把str 的值传递给了s,s 所指向的地址就和str 所指向的地址一致,但是str 和s 各自占用各自的存储空间 。在函数体内对s 进行自加1 运算,并不意味着同时对str 进行了自加1 运算 。

    推荐阅读