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;
}