c语言指针的简单实例

c语言的指针的存在使得c语言对硬件的操控,以及灵活性获得了极大的提升。数组

可是指针的使用存在着不少难点问题。函数

#include<stdlib.h>
#include<stdio.h>
//这里的函数是指针作参数的例子,要知道这个特性能够弥补c语言只能有一个返回值的特性。
void swap1(int *pa,int *pb){
    int t =*pa;
    *pa=*pb;
    *pb=t;
}
//main()函数必需要返回一个数字
int main(){
    int a =15;
    int b=10;
    int* t;
    t=&b;
    a=b;
    b=*t;
    printf("%d\n",b);
    swap1(&a,&b);
    printf("%p\t%p",a,b); 
    return 0;
}

这里咱们先定义两个整型的变量a,bspa

而后再定义一个临时的指针变量,用来存储中间变量指针

而后将b的变量的内存地址赋值给t,注意这里 t  表明的是内存地址code

而后把b的值给a,再用b接受t地址所存储的变量, 注意这里的*t是指t这个地址所指的那个变量。blog

 

指针与数组内存

其实数组的int a[10];io

里来讲a实际上是这个数组的第一个元素的a[0]的指针编译

因此数组变量自己就是表达地址,因此class

 1   int a[10];
 2   int *p=a; //无需用&取地址
 3 
 4 可是数组的单元表达的是变量,须要用&取地址  
 5   a==&a[0];
 6 
 7 []运算符能够对数组作,也能够对指针作:
 8 
 9 
10    p[0] <==>a[0];
11 这里的p[0]至关于*p
12 
13 *a能够表示a[0]
14 
15 数组变量是const的指针

const 这个修饰符的做用就是代表一个变量是指定的值不能改变了

int* const p=&i; //p是const

*q=26;//OK
q++; //ERROR
 1   int ls=58;
 2     int ls1=64;
 3     int* const q=&ls;
 4     *q =10;
 5     *q=20;
 6 //  q = &ls1;   这句是不能经过编译的,由于这个指针是不能指向其余位置的地址 
 7     //执行成功说明这里的指针变量是能够被改变的
 8     ls=36 ;
 9     printf("\n%d",*q);
10     //而后咱们来看另一种状况
11     int P1=10;
12     int P2=20;
13     int const *T=&P1;
14     T=&P2;//执行结果为30
15     //*T =15;这里是不能经过编译的,由于这个指针指向的位置存储的变量是不能赋值改变的。 
16     P2=30; 
17     printf("\n%d",*T);
18     //关键在于这里的const是在*的前面仍是后面决定的 
19     return 0;
1 void mai(const int*p){
2        
3        int *ls=*p; 
4            printf("ls的地址:%p",ls);
5 } 
6 这里咱们传入了一个指针,可是在函数里,是不能改变这个指针所指向的值的

 指针的运算

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 
 4 int main(){
 5     int i,j;
 6     i=10;j=12;
 7     printf("i,j:%d,%d\n",&i,&j);
 8     printf("i,j:%d,%d",*&i+1,&j);
 9     printf("\n&i-&j:%d",(&i)-(&j));//这里两个地址作差实际上是地址差/类型所占的位数
10 
11     int *p;
12     p=&i;
13     *p++;//其实是*(p++);++优先级比*高;数组遍历
14     printf("\n*p:%d",*p);
15     return 0;
16 }

指针的类型转换

void*表示不知道指向什么东西的指针

指针变量的大小是相同的可是,指针是有类型的差异

 

总之指针的做用

1、须要传入较大的数据的时候用作参数
2、传入数组后对数组作操做
3、函数返回的结果不止一个的时候能够用指针带出(c只能return一个变量,或者值)
     须要要用函数来修改不止一个变量
4、动态申请内存.......

具体的后续会更。

相关文章
相关标签/搜索