指针铁律1:指针也是一种数据类型

本文深入探讨了指针的基本概念,包括指针作为变量的特性、如何操作指针指向的内存空间、指针变量与内存块的区别以及指针步长的概念。通过具体的代码示例,帮助读者理解指针在C语言中的作用。

指针铁律1:指针也是一种数据类型

1) 指针也是一种变量,占有内存空间,用来保存内存地址 .
测试指针变量占有内存空间大小sizeof

2)*p操作内存

在指针声明时,*号表示所声明的变量为指针
在指针使用时,*号表示 操作 指针所指向的内存空间中的值  *p相当于通过地址(p变量的值)找到一块内存;然后操作内存  *p放在等号的左边赋值(给内存赋值) 
*p放在等号的右边取值(从内存获取值)
3)指针变量(p)和它指向的内存块(*p)是两个不同的概念
//含义1 给p赋值p=0x1111; 只会改变指针变量值,不会改变所指的内容;p = p +1; //p++

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

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

 //含义4 =左边char *p 

//含义5 保证所指的内存块能修改
4)指针是一种数据类型,是指它指向的内存空间的数据类型  。
含义1:指针步长(p++),根据所指内存空间的数据类型来确定 p++    ==== (unsigned char )p+sizeof(a);
结论:指针的步长,根据所指内存空间类型来定。
注意: 建立指针指向谁,就把谁的地址赋值给指针。图和代码和二为一。    不断的给指针变量(p)赋值,就是不断的改变指针变量(和所指向内存空间(*p)没有任何关系)。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

char* getStr11()
{
    char *temp = NULL;
    temp = "abcdef";//这里的字符串存储在常量区 函数结束时还存在
    return temp;
}
char* getStr12()
{
    char str[] = "abcdef";//这里的字符串存储在栈区 临时
    return str;//这个结果存储在栈区 函数临时开辟的空间 结束调用 释放空间
}
int main()
{
    char* p = getStr11();
    char* p2 = getStr12();
    printf("p:%s\n",p);//打印正常值,getStr11中的字符串的生存期是整个程序所以能正常打印
    printf("p:%s\n",p2);//打印出乱码 ,因为getStr12中的字符串的生存期是函数体内,函数返回后就消失了
    //*(p+2)='r';  //程序报错,不可以通过指针修改常量区的数据
    system("pause");
    return 0;
}


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值