有关指针的问题

可能重复:
在C数组中,为什么这是真的? a [5] == 5 [a]

  • 如果p是一个指针(比如int * p ),那么[p]意味着什么? 另外4[p]是什么意思? (即将一个标量乘以[p])

  • 假设xyz是程序中定义的一些数据类型。 那么这是什么

    void (*xyz)(void);
    

    声明的意思?


  • 4[p]含义与p[4]相同。 请参阅http://c-faq.com/aryptr/joke.html。

  • 如果xyz已经是数据类型,那么这是一个错误。 如果不是,那么它就是一个名为xyz的函数指针的定义。 假设你的意思是“ void ”而不是“ coid ”,然后cdecl.org告诉我们:

    声明xyz为指向函数(void)返回void


  • 如果p被定义为int *p那么

    [p]是错的! 导致错误: '['令牌之前'['预期表达式。

    0[p]是正确的!

    并且0[p]p[0]相同,同样p[4]4[p]

    编译器将p[4]转换为*(p + 4) ,即*(4 + p) => 4[p]

    另外 ,假设你有一个数组int a[10] ,你可以通过a[i]i[a]来访问数组的元素,

    下面的例子会很有用,我认为:

    int main(){
        int a[5] = {1,2,3,4,5};
        int* p;  // similar declaration of p (you asked)
        p = a;
        int i= 0; 
        for(i=0; i < 5; i++){
            printf("a[i] =  %d  and i[a] = %d n",a[i],i[a]);
        }
        printf(" using p n"); // access using pointer.  
        for(i=0; i < 5; i++){
            printf("p[i] =  %d  and i[p] = %d n",p[i],i[p]);
        }
    }    
    

    编译和执行:

    :~$ ./a.out 
    a[i] =  1  and i[a] = 1 
    a[i] =  2  and i[a] = 2 
    a[i] =  3  and i[a] = 3 
    a[i] =  4  and i[a] = 4 
    a[i] =  5  and i[a] = 5 
     using p 
    p[i] =  1  and i[p] = 1 
    p[i] =  2  and i[p] = 2 
    p[i] =  3  and i[p] = 3 
    p[i] =  4  and i[p] = 4 
    p[i] =  5  and i[p] = 5 
    

    [答案-2]

    声明void (*xyz)(void); 创建xyz指向函数的指针,该函数返回void并且参数为void 。 ( xyz不是一个数据类型,而是一个指针变量)例如

    void function(void){
     // definition 
    }
    
    void (*xyz)(void);   
    

    那么xyz可以分配function地址:

    xyz = function;   
    

    使用xyz()可以调用function()void (*xyz)(void)示例:

    #include<stdio.h>
    void function(void){
        printf("n An Examplen");
    } 
    int main(){
        void (*xyz)(void);   
        xyz = function;    
        xyz();
    }
    

    现在编译并执行它:

    :~$ gcc  x.c
    :~$ ./a.out 
    
     An Example
    :~$ 
    

    [p]是什么意思?

    本身没有。

    另外4[p]是什么意思?

    由于指针运算, 4[p]意味着*(4 + p) ,即加入是可交换的,相当于*(p + 4) ,这又可以写成p[4] ,即它是由p指向的数组的第5个元素。

    如果xyz是一个数据类型,那么void (*xyz)(void); 声明的意思?

    那是一个语法错误。

    如果xyz不是数据类型,那么它将xyz声明为一个函数指针,并返回void (即“Nothing”)。

    链接地址: http://www.djcxy.com/p/86737.html

    上一篇: Questions regarding pointers

    下一篇: Unusual output with printf statement