9.1 指针和二维数组 指向指针的指针
转载自:https://blog.csdn.net/yanyanwenmeng/article/details/81139906
二维数组里面的数再内存里面是连续存放的
int a[M][N]: a[i] 的类型是T *;第i行
int a[i]: a的类型是T *
-
#include<iostream>
-
using
namespace
std;
-
void reserve(int *p, int size)
-
{
-
for(
int i =
0; i < size/
2 ; ++i)
//p[1][i]
-
{
-
int tmp = p[i];
-
p[i] = p[size - i
-1];
-
p[size - i -
1] = tmp;
-
}
-
}
-
int main()
-
{
-
int a[
3][
4]={{
1,
2,
3,
4},{
5,
6,
7,
8},{
9,
10,
11,
12}};
-
reserve(a[
1],
4);
//二维数组的a[1]也是int * 类型的 将第一行的四个元素颠倒
-
for(
int i =
0; i <
3; ++i)
-
{
-
for(
int j =
0; j <
4; ++j)
-
{
-
cout << a[i][j] <<
" ";
-
}
-
}
-
return
0;
-
}
-
#include<iostream>
-
using
namespace
std;
-
void reserve(int *p, int size)
-
{
-
for(
int i =
0; i < size/
2 ; ++i)
//p[1][i]
-
{
-
int tmp = p[i];
-
p[i] = p[size - i
-1];
-
p[size - i -
1] = tmp;
-
}
-
}
-
int main()
-
{
-
int a[
3][
4]={{
1,
2,
3,
4},{
5,
6,
7,
8},{
9,
10,
11,
12}};
-
reserve(a[
1],
4);
//二维数组的a[1]也是int * 类型的 将第一行的四个元素颠倒
-
reserve(a[
1],
6);
//将8、7、6、5、9、10进行颠倒,因为二维数组里面的数据是连续存放的,相当于是一维数组
-
for(
int i =
0; i <
3; ++i)
-
{
-
for(
int j =
0; j <
4; ++j)
-
{
-
cout << a[i][j] <<
" ";
-
}
-
}
-
return
0;
-
}
-
#include<iostream>
-
using
namespace
std;
-
int main()
-
{
-
int **pp;
-
int *p;
-
int n =
1234;
-
p = &n;
//p指向n的地址
-
pp = &p;
// pp指向p的地址
-
cout << **pp <<
endl;
-
return
0;
-
}
必须要让指针先指向某个地址,然后才能读取他的值,最后才能改变它的值。
-
#include<iostream>
-
using
namespace
std;
-
int main()
-
{
-
char *pc;
-
char c =
'B';
-
*pc = c;
//pc并没有指向c的地址,所以不能确定其值
-
cout << *pc <<
endl;
//没有输出结果
-
return
0;
-
}
改为取地址就对了
-
#include<iostream>
-
using
namespace
std;
-
int main()
-
{
-
char *pc;
-
char c =
'B';
-
//*pc = c;//pc并没有指向c的地址,所以不能确定其值
-
pc = & c;
-
cout << *pc <<
endl;
//B
-
return
0;
-
}
-
#include<iostream>
-
using
namespace
std;
-
int main()
-
{
-
char ch1 =
'A';
-
char *pc = &ch1;
//pc指向ch1的地址
-
*pc =
'B';
//ch1='B'
-
cout << *pc <<
" " << ch1 <<
endl;
// B B
-
return
0;
-
}