急,C++的指针问题

来源:百度知道 编辑:UC知道 时间:2024/06/17 19:33:08
int b[10][20]
int (*pb)[20]
书上说*(*(pb+i)+j)和pb[i][j]是一样的,假如i=0,请问输出pb和*(pb)有什么不同,请不要说*(pb)输出的是地址的内容,因为还有*(*(pb)+j)外面还有一个*了

pb是一个行指针,相当于一个二维数组的指针

pb可以理解为指向二维数组的地址
*pb则可以理解为指向一行

(*pb)就可以理解为第0行
(*pb) +j 第0行第j列

*(*(pb) +j)第0行第j列的值

利用万能公式
*(a+i)=a[i]
注意上面你定义的pb是指针的指针,也就是你一个int变量的地址的地址
可以看成是int**型变量,而*(pb)则为int*变量,
这个有点麻烦,希望你看懂了

输出pb和*(pb)
取决于你认为pb指向的是什么东西
或者说编译器认为你让pb指向的是什么东西。
如果pb是char *
那么pb输出是字符串 (*pb)输出的是字符串的第一个字符。
如果pb是int *
那么pb输出是pb指向的地址 (*pb)输出的是pb指向地址的内容(那个整数)
依次类推。

pb 和 *pb 输出的内容一样,都是输出地址,就是对同一块内存 编译器在不同的时候做不同的解释,如果用pb,编译器会当成 这块内存的内容当成指针的指针,如果用*pb,编译器会把这块内存的内容当成 指针