#指针
什么是指针:
指针就是一块内存空间,就是一个内存地址
默认c语言的指针 32位内存空间
0x00000000~ 0xffffffff
#指针和指针变量是两个不同的概念
* 指针代表的是一块内存地址
* 指针变量是一个存储指针的变量,存储这块内存地址
- l指针就是地址,地址就是指针
- l地址就是内存单元的编号
- l指针变量是存放地址的变量
- l指针和指针变量是两个不同的概念
- l但是要注意: 通常我们叙述时会把指针变量简称为指针,实际它们含义并不一样
#include <stdio.h>
main()
{
//声明一个变量。声明一块内存空间,变量的名字叫i ,变量的类型是int , 可以存放一个int类型的数据。
int i; //4个byte
//把3的数据,放在i变量里面,放在i对应的内存空间里面
i = 3; //4个byte
//&i;//取出来i的地址。 0x2266ff //需求把一个地址数据存储起来。
//声明一个变量,声明一个内存空间,变量的名字叫p, 变量的类型int* ,可以存放的数据int* 的数据,int类型变量在内存中的地址。
int* p; // 4个byte
p = &i;
printf("i=%d\n",i);
printf("p=%#x\n",p);
//把p变量,里面存放的内存地址 ,根据这个内存地址把这个地址里面的数据取出来
printf("*p=%d\n",*p);
system("pause");
}
以上这段程序只需要8个字节
#修改交换数据的模板
* 传递的应该是要修改变量的内存地址
* 子函数里面 根据这个内存地址,把这个内存地址里面的数据给修改了
#include <stdio.h>
void swap(int i ,int j){
printf("互换数据\n");
int temp;
temp = i;
i = j;
j = temp;
}
main()
{
int i = 3;
int j = 5;
printf("i=%d\n",i);
printf("j=%d\n",j);
swap(i,j);
printf("i=%d\n",i);
printf("j=%d\n",j);
system("pause");
}
失效
#include <stdio.h>
//参数变成了 变量在内存空间的地址 p,q都是指针变量 用来存放地址
//主函数调用的时候 传递不是 i,j 而是i和j变量在内存中的地址。
void swap(int* p ,int* q){
printf("互换数据\n");
//*p //把p地址里面存放的数据取出来 i
// *q //把q地址里面存放的数据取出来 j
int temp;
temp = *p;
*p = *q;
*q = temp;
}
main()
{
int i = 3;
int j = 5;
printf("i=%d\n",i);
printf("j=%d\n",j);
//传递地址
swap(&i,&j);
printf("i=%d\n",i);
printf("j=%d\n",j);
system("pause");
}
有效
11_利用指针可以方便表示字符串
#include <stdio.h>
main()
{
//c语言用字符数组表示一个字符串。要求字符串结尾 \0
char arrays[6]={'h','e','l','l','o','\0'};
char* s = "sdlkjflksjfladsjflsjfdlaskfaf";
char* name ="zhangsan";
char* password="123456";
printf("s=%s\n",s);
system("pause");
}