对指针int*p,* p和p对应的分别是什么


int*p;
int b[10];
pb;
*p6;

三四行的分别是代表的什么

  1. int* p; 声明一个指向整型(int)数据的指针变量p。p可以存储一个整型变量的内存地址。

  2. int b[10]; 声明一个包含10个整型元素的数组变量b。数组名b本身代表了数组的首个元素的地址。

  3. p = b; 指针变量p指向数组b的首个元素的地址。也就是说,现在p指向了数组b的第一个元素。

  4. *p = 6; 指针p所指向的地址上的值设置为6。由于p指向数组b的第一个元素,所以这个语句把数组b的第一个元素的值设置为6。

p是整型指针指向数组b的第一个元素
*p是解引用,就是表示p指向的这个元素的值赋值为6

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7793429
  • 这篇博客也不错, 你可以看下指向指针的指针(int **p)
  • 除此之外, 这篇博客: 如何正确声明二维数组的指针中的 int(*p)[3]与int *p[3]的区别 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 首先,造成这种区别的原因是间接引用运算符*与下标运算符【】之间优先级不同的差异

    int(*p)[3]中首先:(*p)表明p是一个指针,剩下部分作为修饰**int[3]**说明p是一个指针,并且指向的数据类型是一个个包含3个int值的数组。

    intp[3]呢?
    首先:p先与【】结合,这表明p首先是一个数组,剩下的int
    作为修饰,表明这个数值的元素的类型是指向int类型的指针。

    最后一个,我现在还不是很理解,大家如果愿意教教我,感激不尽!

  • 以下回答由chatgpt基于相关博客总结生成:

    int *p: p是一个指向int类型的指针,可以存放int类型变量的地址。

    p: p是一个指针解引用操作符,可以取出指针p所指向的变量的值。

    int (*p)[3]: p是一个指向长度为3的int数组的指针。先将p看作一个整体,然后解释为一个指针,指向一个长度为3的int数组。

    下面给出一些具体的例子:

    #include <iostream>
    
    int main() {
        int a = 10;
        int* p = &a; // p指向变量a
        std::cout << *p << std::endl; // 输出:10
    
        int b[3] = {1, 2, 3};
        int (*q)[3] = &b; // q指向数组b
        std::cout << (*q)[0] << std::endl; // 输出:1
    
        return 0;
    }
    

    解释: 1. int p = &a; 表示定义一个指针p,指向变量a的地址。 2. p 表示取出p所指向的变量的值,即输出变量a的值。 3. int (q)[3] = &b; 表示定义一个指针q,指向数组b的地址。 4. (q)[0] 表示取出q所指向的数组的第一个元素的值,即输出数组b的第一个元素的值。