You-Name 发表于 2021-2-3 18:26:02

关于指针和指针数组和数组的问题。

关于指针和指针数组和数组的问题。
例:


      int ch1 = {10, 20, 30, 40, 50};
      int ch2 = {100, 200, 300, 400, 500};
      int ch3 = {1000, 2000, 3000, 4000, 5000};

      int *ch = {ch1, ch2, ch3};

      printf("ch1 = %p\n", ch1);
      printf("ch = %p\n", ch);
      printf("ch = %p\n", ch);
      printf("ch = %p\n", ch);
      printf("ch1+1 = %p\n", ch1+1);
      printf("ch+1 = %p\n", ch+1);
      printf("ch+1 = %p\n", ch+1);
      printf("ch+1 = %p\n", ch+1);

      printf("*ch1 = %d\n", *ch1);
      printf("*(ch) = %d\n", *(ch));
      printf("*(ch) = %d\n", *(ch));
      printf("*(ch) = %d\n", *(ch));
      printf("*(ch1+1) = %d\n", *(ch1+1));
      printf("*(ch+1) = %d\n", *(ch+1));
      printf("*(ch+1) = %d\n", *(ch+1));
      printf("*(ch+1) = %d\n", *(ch+1));
      putchar('\n');

      printf("ch = %p\n", ch);
      printf("*ch = %p\n", *ch);
      printf("ch+1 = %p\n", ch+1);
      printf("*ch+1 = %p\n", *ch+1);
      putchar('\n');

      printf("**ch = %d\n", **ch);
      printf("**(ch+1) = %d\n", **(ch+1));
      printf("*(*ch+1) = %d\n", *(*ch+1));
      putchar('\n');


执行结果为:

ch1 = 0xbfc5eeb8
ch = 0xbfc5eeb8
ch = 0xbfc5eea4
ch = 0xbfc5ee90
ch1+1 = 0xbfc5eebc
ch+1 = 0xbfc5eebc
ch+1 = 0xbfc5eea8
ch+1 = 0xbfc5ee94
*ch1 = 10
*(ch) = 10
*(ch) = 100
*(ch) = 1000
*(ch1+1) = 20
*(ch+1) = 20
*(ch+1) = 200
*(ch+1) = 2000

ch = 0xbfc5de90
*ch = 0xbfc5eeb8
ch+1 = 0xbfc5de94
*ch+1 = 0xbfc5eebc

**ch = 10
**(ch+1) = 100
*(*ch+1) = 20


求问**(ch+1) 为什么等于100,应该等于2000?还是等于其他???????{:10_243:}

倒戈卸甲 发表于 2021-2-4 09:58:07

很简单啊,ch是个数组,ch可作为指针指向数组内首元素ch1,ch+1则指向数组内第二个元素ch2,一层解引用得到元素ch2,ch2这里又作为指针处理,也就是数组ch2的首元素地址,第二次解引用就得到数组ch2的这个首元素

You-Name 发表于 2021-2-4 10:07:28

倒戈卸甲 发表于 2021-2-4 09:58
很简单啊,ch是个数组,ch可作为指针指向数组内首元素ch1,ch+1则指向数组内第二个元素ch2,一层解引用得到 ...

兄弟,你看执行结果的地址,这不是数组指针,这是指针数组

倒戈卸甲 发表于 2021-2-4 12:28:30

本帖最后由 倒戈卸甲 于 2021-2-4 12:41 编辑

You-Name 发表于 2021-2-4 10:07
兄弟,你看执行结果的地址,这不是数组指针,这是指针数组

???这就是我此刻的心情,你在讲什么?还是说你看不懂我敲的字?我上面写的不就是ch是个数组。然后你跑来跟我说这不是数组指针,这是指针数组???我没眼花吧?是你没睡醒还是我没睡醒?

倒戈卸甲 发表于 2021-2-4 12:34:45

而且你不是打印了地址吗?你按我说的去看,ch本身指向数组首元素,ch一层解引用是不是得到ch1?你打印ch1和打印*ch是不是一个结果?

人中仙 发表于 2021-2-4 14:45:17

ch是一个指针数组
//以下不是代码,等号仅表示两者相同,并非赋值或逻辑比较
ch = (ch地址)
ch+1 = (ch的地址)
*(ch+1) = ch = ch2 //指针数组中依次存放的是ch1,ch2,ch3三个指针,即每个数组的首元素地址
**(ch+1) = *ch = *ch2 = ch2    //ch2的值是100

万千只cnm 发表于 2021-2-11 14:21:57

ch指针数组 存放的是指针
**(ch+1)== * ( * ( ch+1)+0)
ch+1就指向ch2    也就是 &ch2
*(ch+1)-->ch2==&ch2
**(ch+1)==   &ch2
所以=100
页: [1]
查看完整版本: 关于指针和指针数组和数组的问题。