指针2)

雨里青山隐 / 2024-09-26 / 原文

1.&

&是地址符,类型是其后面的类型加一个“*”,任何变量都可以使用&来获取地址,但不能用在常量上。     

char a = 10; 

short b = 20; 

int c = 30; 

char*=pa

pa=&a

lea取地址:ebp-4的地址放入eax,再将eax里的地址放入ebp-10里

&可以取任何一个变量的地址

&a的类型是a的类型+*—char*

char a = 10;   

char* pa = (char*)&a;  

简写为:  

char* pa = &a;   

char** ppa = (char**)&pa;  —————————————

简写为:  

char** ppa = &pa;  

 ————————————————————————————————————————————————————————————————

x全局变量,后面是他的地址。y存的是x的值

y存的是x的地址

char* x   

*x==char

ebp-8里的值放入了ecx里(是一个地址)

将ecx里的地址里面的值存入edx

————————————————————————————————————————————————————————

数组

char arr[10];      

char* p = &arr[0]; //取数组第一个元素的地址    

char* p2 = arr; //简写    

*(p+i)=p[i]    

此时p指数组第一个的地址

*p指第一个的内容

———————————————————————————————————————————————————————————

 字符串

char* x = "china"; 

char y[] = "china";

void Function() 

 *(x+1) = 'A';不能修改(常量区

y[1] = 'A';可以修改(全局区

} 

——————————————————————————————————————————

void Function()   

{   

 char* x = "china";    

在常量区

 char y[] = "china";   

 

先将前四个字节拷贝到eax中(eax=6e696863),然后存入ebp-8,再将最后一个字节存入cx中

存入ebp-4

 *(x+1) = 'A';  修改不了

 y[1] = 'A';  修改成功

}   

——————————————————————————————————————————————————————————

指针函数

是一个函数,返回值是*类型

1.char* strcpy (char* dest, char* src);     

复制字符串src到dest中。返回指针为dest的值。     

char* strcpy (char* dest,char* src)   

{   

char* ret =dest

 while((*dest++)=(*src++));   

*dest =*src; 

dest++; 

src++;

 return ret;  

}   

3、char* strcat (char* dest, char* src);     

将字符串src添加到dest尾部。返回指针为dest的值。     

char* strcat (char* dest, char* src)   

{   

 while(*dest != '\0')  先将指针指向结尾即0,

  dest++; 

 while((*dest++ = *src++)!='\0');    

 return dest;  

}