C语言之指针篇

来源:互联网 发布:李氏筋骨散淘宝 编辑:程序博客网 时间:2024/05/21 09:55
赋值(Assignment)
    可以把一个地址赋给指针变量。通常使用数组名或地址运算符&来进行地址赋值。
 取值(dereferencing)
    运算符*可取出指针变量指向地址中存储的数值。
 取指针变量的地址(Taking a pointer address)
    指针变量同其他变量一样具有地址和数值。使用运算符&可以得到指针本身的地址。
 将一个整数加给指针变量
    可以使用+运算符来把一个整数加给一个指针变量。此时,整数会和指针变量所指类型的字节数相乘,然后乘得的结果会加到初始地址上。
 增加指针变量的值

    可以通过一般的加法或增量运算符来增加一个指针变量的值。

从指针变量中减去一个整数
    可以使用-运算符来从一个指针变量中减去一个整数。指针变量必须是第一个操作数。
 减小指针变量的值
    指针变量的减量运算。
 求差值
    可以求出两个指针变量间的差值。通常对分别指向同一个数组内两个元素的指针变量求差值,以求出元素之间的距离。差值的单位是相应类型的大小。
 比较
    可以使用关系运算符来比较两个指针变量的值(前提是两个指针变量具有相同的类型)。





#include <stdio.h>

// 指针变量的定义
int main1()
{
int a;

// 定义一个指针变量,
// *表示这个变量是指针,内部必须要存地址
// int 这个指针指向的类型是 int 类型数据
int *p;
p = &a;

printf ("&a = %p\n", &a);
printf ("p  = %p\n", p);
printf ("&p = %p\n", &p);

return 0;
}


// 指针变量的大小
int main2()
{

int a;
int *p = &a;

char ch;
char *pch = &ch;

// 指针内部存的是地址,32位情况下,地址都是32位的
// 所以在32位编译器下,指针都是4个字节
printf ("p   = %d\n", sizeof(p));
printf ("pch = %d\n", sizeof(pch));

return 0;
}


// 指针变量的取值
int main3()
{
int a = 10;

int *p = &a;

printf ("a = %d\n", a);

// 在变量定义的时候,*代表变量的类型是指针
// 在使用指针变量的时候,*代表去指针指向的那一块内存的值
// * + 地址, 代表那个那个地址所表示的内存
printf ("*p = %d\n", *p);

*p = 200;

printf ("a = %d\n", a);

return 0;
}


int main()
{
int a = 10;
int b = 20;

int *pa = &a;
int *pb = &b;

// 通过 pa 与 pb 交换 a 与 b 的值
int tmp = *pa;
*pa = *pb;
*pb = tmp;

return 0;
}


// * &
int main()
{
int a = 10;

int *p = &a;

// *&a ==> *(&a) ==> *p ==> a
// &*p ==> &(*p) ==> &a ==> p

return 0;
}


























原创粉丝点击