指针也是一种数据类型

来源:互联网 发布:叮叮当软件下载 编辑:程序博客网 时间:2024/06/06 05:19

 1、指针也是一种变量,占用内存空间,用来保存另一个变量的内存地址。

2*p操作内存

     在指针声明时,*表示所声明的变量为指针。

     在指针使用时,*表示操作指针所指向的内存空间中的值。

      *p相当于通过地址(p变量的值)找到一块内存,然后操作内存。

      *p放在等号左边为赋值(给内存赋值)

      *p放在等号右边为取值(从内存获取值)

3、指针变量和它指向的内存块是两个不同的概念。

     不断的给指针赋值,相当于不停的改变指针的指向。

1)给p赋值 p=0x1111; 只会改变指针变量值,不会改变所指向的内容

p=p+1;  p++;

2)给*p赋值 *p='a'; ,不会改变指针变量的值,只会改变所指向的内存块的值。

3=左边*p表示给内存赋值,=右边*p表示取值,含义不同切记!

4=左边 char *p

5保证所指的内存块能修改

4指针也是一种数据类型,是指它指向的内存空间的数据类型

指针步长(p++),根据所指内存空间的数据类型来确定。

结论:指针的步长,是根据所指内存空间类型来确定的

#include"stdio.h"

#include"stdlib.h"

#include"string.h"

 

char *getStr()

{

char*tmp=NULL;

tmp ="abcdefg";  //指针tmp指向常量abcdefg

returntmp;

}

 

//int getABC1(char*p1);                intgetABC1(char*   p1);

//int getABC2(char** p2);    int getABC2(char*  *p2);   int getABC2(char   **p2);

//int getABC3(char***p3);        

//int getABC4(char(*p4)[30]);                intgetABC4(char (*p4)   [30]);

//int getABC5(charp5[10][30]);                intgetABC5(char p5[10][30]);

 

//指针做函数参数 形参有多级指针的时候,站在编译器的角度,只需要分配4个字节的内存(32bit平台)

//当我们使用内存的时候,我们才关心指针所指向的内存,是一维的还是二维的

 

void main()

{

inta = 10;

char *p1 = 100;  //可以将100赋给指针变量,即告诉编译器分配4个字节的内存

char****p2 = 100;

int*p3 = NULL;

printf("a:%d, p1:%d , p2:%d\n",sizeof(a),sizeof(p1),sizeof(p2));

 

p3= &a;

*p3 = 20;  //间接的修改a的值

// *就像一把钥匙,通过一个地址(&a),去修改a变量的值

{

intc=0;

c=*p3;

printf("c:%d\n",c);

}

 

{

char*p4=NULL;

p4= (char *)malloc(100);

}

 

{

char*p=getStr();

printf("p:%s\n",p);

//*(p+2)='r';                //*(p+2)表示常量区的第三个元素,常量不能被修改

//因此,要修改指针指向的内存块,首先要保证可以被修改,即为变量区

}

 

printf("sssss\n");

system("pause");

}

0 0
原创粉丝点击