11-C语言指针

目录:

一、指针

1 内存被分为字节,每个字节有唯一地址,指针保存的是内存中的地址。

2 保存指针的变量,就叫指针变量,(保存地址)

3 声明一个指针变量

int i = 0;

int* p;//声明一个指针变量 int*指针类型

int * p; int* p; int *p;//这几种写法都行

4 每个指针变量能指向一种特定类型的对象。

5 指针是引用数据类型,因为本身没有保存最终数据,只是保存了数据的地址,间接的找到内存中的数据。

6 指针的用法

指针可用于参数,传递变量的地址,相当于多个函数共享内存地址(内存空间)。

7 值传递:相当于不同变量,指向不同区域

地址传递:相当于同一变量,指向同一区域

p:指针的值 &i:取i的地址

*p:指针指向的值 i:变量名

练习:

1)有两个数i = 2,j = 3使用函数调换两个数的值,在调换函数中查看i和j的值,在main函数查看调换后的值。

2)从键盘上输入5个数,使用一个函数求5个数中最大值、最小值,注意函数没有返回值。

指针也可以做为返回值,但不要返回自动变量。因为局部变量的生命周期,当函数结束,局部变量会被自动清除。

3)指针支持加整数、减整数、指针的比较和相减,但运算的单位由指针的类型决定。

#include <stdio.h> test(){int i = 10;* p;//int * p2;//int *p3;//赋值p = &i;//取值printf(,i);printf(,&i);printf(,*p);//*p指针指向的值printf(,p);//p是指针的值}test2(int* p){printf(,*p);*p = 20;printf(,*p);}test3(int* p1,int* p2){printf(,*p1,*p2);int temp = 0;temp = *p1;*p1 = *p2;*p2 = temp;printf(,*p1,*p2);}test4(int size,int array[],int* maxp,int* minp){for (int i = 0; i < size; i++) {if (array[i] > *maxp) {*maxp = array[i];}if (array[i] < *minp) {*minp = array[i];}}}* test5(){static int i = 10;int* p = &i;return p;} test6(){int array[5] = {9,2,3,4,5};printf(,array);int* p = array;printf(,p);printf(,*p);//指针+1 地址+4printf(,p+1);printf(,*(p+1));// printf(,*(p+1));printf(,(*p)+1);(int i = 0; i < 5; i++) {printf(,i,*(p+i));printf(,i,array[i]);printf(,i,*(array+i));}//存储空间printf(,sizeof(array));printf(,sizeof(p));array2[6] = {0};int* p2 = array2;printf(,p);p = p2;printf(,p);}int main(int argc, const char * argv[]){test6();// int* p = test5();// printf(“p:%p\n”,p);// printf(“p->val:%d\n”,*p);// test();// int i = 10;// int* p = &i;// printf(“i val:%d\n”,i);// test2(p);// printf(“i val:%d\n”,i);// int i = 2;// int j = 3;// int* p1 = &i;// int* p2 = &j;// printf(“i:%d,j:%d\n”,i,j);// test3(p1,p2);// printf(“i:%d,j:%d\n”,i,j);// int num[5] = {0};// int max = 0,min = 100;// for (int i = 0; i < 5; i++) {//printf(“输入第%d个数:\n”,i);//scanf(“%d”,&num[i]);// }// test4(5,num,&max,&min);// printf(“max:%d\n”,max);;},没有什么可凭仗,只有他的好身体,没有地方可去,

11-C语言指针

相关文章:

你感兴趣的文章:

标签云: