c/c++指针精讲和需要注意的地方



int *x =&10;//不能对10取地址 因为他不在 堆栈区
//堆栈常量区的都b可以对变量取地址
10就是一个字面量 不能取地址

 1:指针是一种数据类型

1)指针也是一种变量,占有内存空间,用来保持内存地址,在一般情况下所有指针、

都是4个字节;

2)*p操作内存

再指针声明时,*号表示所声明的变量为指针,

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

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

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

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


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

 char s='a';
char *p=&s;
*p='b';//此操作对不会改变指针变量的值,但是会改变所指向地址的值

保证指向的内存是可修改的

char*p="abcdeff"; //c++编译器会做两个操作先给字符串分内存再给 p 分配4个字节内存
然后把a的地址赋值给 *p  也就是字符串的首地址

char *p=NULL;

strcpy([,"abcde");  //不可以向空内存写数据


 4)怎么理解(多级)指针做函数参数

a.站在c/c++编译器的角度,如果是指针的形参 编译器只会分配四个字节的内存
例如:
/*
void sed(char *p1);void sed(char*  p1)
void send(char**p1);void send(char *   * p1);
void send(char ***p1);void send(char *p[])
void send(char (*p)[10]);void send(char ******p);
* /  

二间接赋值时指针存在最大的意义
1指针变量和他所指向的内存空间是两码事
int a=10;
a=15;    //直接赋值
int *p=NULL;
*p=20;  //*p 放在左边就是间接修改了a的值 这样体现出的意义不大

但是如果用在函数传参那就不一样了;

int Ge(int*p)
{
    *p=30;
}
int main()
{
	int a=10;
	Ge(&a)
}
有点事 下次再补充

int *x =&10;//不能对10取地址 因为他不在 堆栈区
//堆栈常量区的都b可以对变量取地址
10就是一个字面量 不能取地址

 1:指针是一种数据类型

1)指针也是一种变量,占有内存空间,用来保持内存地址,在一般情况下所有指针、

都是4个字节;

2)*p操作内存

再指针声明时,*号表示所声明的变量为指针,

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

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

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

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


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

 char s='a';
char *p=&s;
*p='b';//此操作对不会改变指针变量的值,但是会改变所指向地址的值

保证指向的内存是可修改的

char*p="abcdeff"; //c++编译器会做两个操作先给字符串分内存再给 p 分配4个字节内存
然后把a的地址赋值给 *p  也就是字符串的首地址

char *p=NULL;

strcpy([,"abcde");  //不可以向空内存写数据


 4)怎么理解(多级)指针做函数参数

a.站在c/c++编译器的角度,如果是指针的形参 编译器只会分配四个字节的内存
例如:
/*
void sed(char *p1);void sed(char*  p1)
void send(char**p1);void send(char *   * p1);
void send(char ***p1);void send(char *p[])
void send(char (*p)[10]);void send(char ******p);
* /  

二间接赋值时指针存在最大的意义
1指针变量和他所指向的内存空间是两码事
int a=10;
a=15;    //直接赋值
int *p=NULL;
*p=20;  //*p 放在左边就是间接修改了a的值 这样体现出的意义不大

但是如果用在函数传参那就不一样了;
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值