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

被折叠的 条评论
为什么被折叠?



