指针2

类型转化

基本类型之间可以相互转换,结构体不可以和基本类型之间转换

&符号

可以放到任何变量前面获取变量的地址,被称为取地址符,假设 char a变量,&a的类型就是char + *也就是char*类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include "stdafx.h"

struct st
{
int age;
int name;
};

void fun()
{

char x =10;

char* y=&x;

}

int main(int argc, char* argv[])
{

fun();
getchar();
return 0;

}

image-20231109091553261

求值

*跟变量名那么这个变量本身必须是指针类型,*&相反,星号作用是去掉一个星号

&取地址,*取值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "stdafx.h"


int main(int argc, char* argv[])
{

int a=10;

int* b=&a;

int c=*b;



getchar();
return 0;

}
1
2
3
4
5
6
7
8
9
10
11
12
9:
10: int a=10;
0040BBB8 mov dword ptr [ebp-4],0Ah
11:
12: int* b=&a;
0040BBBF lea eax,[ebp-4]
0040BBC2 mov dword ptr [ebp-8],eax
13:
14: int c=*b;
0040BBC5 mov ecx,dword ptr [ebp-8]
0040BBC8 mov edx,dword ptr [ecx]
0040BBCA mov dword ptr [ebp-0Ch],edx

指针操作数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include "stdafx.h"

void fun()
{
char arr[5]={1,2,3,4,5};

char* pa = arr;//==char* pa=&arr[0];

for(int i=0;i<5;i++)
{
printf("%d\n",*(pa+i));//pa是指针类型,注意相加的规则是去掉星号的宽度乘以加数才是真正的加数
}

}

int main(int argc, char* argv[])
{

fun();
getchar();
return 0;

}

image-20231109091839240