指针2)

*

int x;

x=10;//此写法为简写,x=(int )10;此写为完整形式,

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

char* x; 

short* y; 

int* z; 

 

x = (char*)1; 

y = (short*)2; 

z = (int*)3;          //但带*类型,赋值时要写完整形式。并且都是占4个字节

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

char**** a ;  

short**** b ;  

int**** c ;  

a = (char****)100;  

b = (short****)100;  

c = (int****)100;  

a++;  

b++;  

c++;  

printf("%d %d %d",a,b,c);  

 

结果为104,104,104

char* a ;   

short* b ;   

int* c ;   

a = (char*)100;   

b = (short*)100;   

c = (int*)100;    

a++;   

b++;   

c++;     

printf("%d %d %d",a,b,c);   

  结果为101,102,104(去掉一个*看类型宽度是多少,是多少就+多少)

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

  char* a ;  

short* b ;  

int* c ;  

a = (char*)100;  

b = (short*)100;  

c = (int*)100;  

a = a - 5;  

b = b - 5;  

c = c - 5;  

printf("%d %d %d",a,b,c);  

结果为105,110,120(去掉*号看类型宽度,然后与数字相乘,在想加

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

char** a ; 

char** b ; 

a = (char**)200; 

b = (char**)100; 

int x = a - b; 

printf("%d\n",x); 

结果为25(去掉*看类型宽度,然后相减后再除以类型宽度)

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

 

1.&

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

char a = 10; 

short b = 20; 

int c = 30; 

char* =pa

pa=&a

lea取地址:ebp-4的地址放入eax,再将eax里的地址放入ebp-10(pa)里(Ebp- 4里存放的是0a即a的值)

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

&a的类型是a的类型+*==>char*(&a获取a的地址)

char a = 10;   

char* pa = (char*)&a;  

简写为:  

char* pa = &a;   

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

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

简写为:  

char** ppa = &pa;  

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

int x=10;

void

{

int=x;

}

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

y存的是x的地址,x是直接寻址(因为x是全局变量

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

char* x   

*x==char(定义char*为x,则*x相当于char。若为char** x,则*x相当于char*)

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

将ecx(Ecx也是存的地址)对应的地址的值存入edx(edx里存的是x的值)(把ecx当做地址,取e cx对应的值)

注:ecx有[]指的就是取地址对应的值

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

指针数组

char arr[10];      

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

char* p2 = arr; //简写    

*(p+i)=p[i]    

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

*p指第一个的值

———————————————————————)-—————————————————————————

 

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

 字符串

char* x = "china"; 

char y[] = "china";

void Function() 

 *(x+1) = 'A';不能修改(常量区)char*是指针因此x存的是一个地址,地址指向china。因此x存的地址不能改,china这个值在常量区)

y[1] = 'A';可以修改(全局区,把h改成a

} 

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

void Function()   

{   

 char* x = "china";    

在常量区

 char y[] = "china";   

 

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

存入ebp-4

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

 y[1] = 'A';  修改成功(要修改的数据拷贝到堆栈中了

}   

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

指针函数

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

1、int strlen (char* s)   

返回值是字符串s的长度。不包括结束符'/0'。 

 int strlen (char* 5) 

{int ret =0; 

while(*s !=0) 

{ret++; (ret是记录长度

s++; }(s是指针

return ret;}

2..char* strcpy (char* dest, char* src);     (dest目标字符串的首地址,src复制字符串的首地址,strcpy复制完后的首地址

复制字符串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');    (先取值,指针++,然后值判断是否=0,

 return dest;  

}   

4、int strcmp ( char* s1, char* s2);   

一样返回0 不一样返回1   

 int strcmp(char* s1, char* s2)   

{   

 while(*s1 != '\0' && *s2 != '\0')  

 {  

  if(*s1 != *s2) 

  { 

   return 1;

  } 

  s1++; 

  s2++; 

 }  

 if(*s1 == '\0' && *s2 == '\0')  

 {  

  return 0; 

 }  

 else  

 {  

  return 1; 

 }  

}   

 

 结构体指针

 

Struct Arg 

   int a; 

   int b; 

   int c; 

 int  main()

{

Arg* parg;

parg=(Arg*)100

}

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

 

//创建结构体 

Student s; 

s.a = 10; 

s.b = 20; 

s.c = 30; 

 

//声明结构体指针 

Student* ps; 

 

//为结构体指针赋值 

ps = &s; 

 

//通过指针读取数据 

printf("%d\n",ps->a); 

 

//通过指针修改数据 

ps->a = 100; 

 

printf("%d\n",ps->a); 

 

posted @ 2024-09-25 19:29  雨里青山隐  阅读(7)  评论(0编辑  收藏  举报