C语言指针初识

定义指针变量

定义指针变量,在变量名前面加星号*,格式为:

                int a;

datatype *pointname;      int *p; p = &a;

或者              int a;

datatype *pointname = value;   int *p = &a;

定义指针变量时必须带*,给指针变量赋地址值时不能带*,等于一个地址即可改变指针指向

1 //定义普通变量
2 float a = 99.5, b = 10.6;
3 char c = ‘@‘, d = ‘#‘;
4 //定义指针变量
5 float *p1 = &a;
6 char  *p2 = &c;
7 //修改指针变量的值
8 p1 = &b;
9 p2 = &d;

p1从指向&a变为指向&b,p2从指向&c变为指向&d。


通过指针变量取得数据

指针变量存储了数据的地址,通过指针变量能够获得该地址上的数据,格式为:  *pointer;

这里的*称为指针运算符,用来取得某个地址上的数据,

1 #include <stdio.h>
2 int main(){
3     int a = 15;
4     int *p = &a;
5     printf("%d, %d\n", a, *p);  //两种方式都可以输出a的值
6     return 0;
7 }

运行结果:15, 15

a的地址是0X···,p 指向 a 后,p 本身的值会变为 a的地址值0X···,*p 表示获取地址 0X··· 上的数据,也即变量 a 的值,所以 *p 变为了取数据值。



指针除了可以获取内存上的数据,也可以修改内存上的数据

1 #include <stdio.h>
2 int main(){
3     int a = 15, b = 99, c = 222;
4     int *p = &a;  //定义指针变量
5     *p = b;  //通过指针变量修改内存上的数据
6     c = *p;  //通过指针变量获取内存上的数据
7     printf("%d, %d, %d, %d\n", a, b, c, *p);
8     return 0;
9 }

运行结果:99, 99, 99, 99

*在不同的场景下有不同的作用:定义指针变量时的*和使用指针变量时的*意义完全不同。

*可以用在指针变量的定义中,表明这是一个指针变量,以和普通变量区分开;

使用指针变量时在前面加*表示获取指针指向的数据,或者说表示的是指针指向的数据本身。

1 int a,b;   //声明变量
2 int *p = &a; 或者 int *p; p = &a; //定义指针
3 *p = 100; //指针赋值&a的值
4 p = &b;    //改变指向
5 *p = 101; //指针赋值&b的值
1 int x, y, *px = &x, *py = &y;
2 y = *px + 5;  //表示把x的内容加5并赋给y,*px+5相当于(*px)+5
3 y = ++*px;   //px的内容加上1之后赋给y,++*px相当于++(*px)
4 y = *px++;  //相当于y=(*px)++
5 py = px;   //把一个指针的值赋给另一个指针

 1 #include <stdio.h>
 2 int main(){
 3     int a = 100, b = 999, temp;
 4     int *pa = &a, *pb = &b;
 5     printf("a=%d, b=%d\n", a, b);
 6     /*****开始交换*****/
 7     temp = *pa;  //将a的值先保存起来
 8     *pa = *pb;  //将b的值交给a
 9     *pb = temp;  //再将保存起来的a的值交给b
10     /*****结束交换*****/
11     printf("a=%d, b=%d\n", a, b);
12     return 0;
13 }

运行结果:
a=100, b=999
a=999, b=100

关于 * 和 & 的谜题

假设有一个 int 类型的变量 a,pa 是指向它的指针,那么*&a&*pa分别是什么意思呢?

*&a可以理解为*(&a)&a表示取变量 a 的地址(等价于 pa),*(&a)表示取这个地址上的数据(等价于 *pa),绕来绕去,又回到了原点,*&a仍然等价于 a。

&*pa可以理解为&(*pa)*pa表示取得 pa 指向的数据(等价于 a),&(*pa)表示数据的地址(等价于 &a),所以&*pa等价于 pa。

对星号*的总结

在我们目前所学到的语法中,星号*主要有三种用途:

  • 表示乘法,例如int a = 3, b = 5, c;  c = a * b;,这是最容易理解的。
  • 表示定义一个指针变量,以和普通变量区分开,例如int a = 100;  int *p = &a;
  • 表示获取指针指向的数据,是一种间接操作,例如int a, b, *p = &a;  *p = 100;  b = *p;

摘自http://c.biancheng.net/cpp/html/72.html

原文地址:https://www.cnblogs.com/ren-hang/p/10015348.html

时间: 2024-11-10 14:40:29

C语言指针初识的相关文章

C语言指针

C语言指针 指针是什么? 指针也是一个变量,但是这个变量存储的是一个地址,指向一个存储单元.我们可以根据指针(地址)找到他所指的变量,并对这个变量进行操作(赋值等).通过C里面的取地址符号&和取所指内容的符号*可以很方便的表示指针以及指针所指的变量之间的关系 /* ============================================================================ Name C语言指针 : text.c Author : Version : C

C语言--指针(一)

#import <Foundation/Foundation.h> //交换函数 void swap(int x, int y) { printf("x=%d,y=%d",x,y); int temp = 0; temp = x; x = y; y = temp; printf("x=%d,y=%d",x,y); } // void swap2(int *x , int *y) { //不改地址,改地址对应的值 printf("x=%d,y=%

C语言指针讲解

指针是C语言的一种数据类型,类似于C中的其他类型,例如int ,char 等.既然指针是一种类型,当我们定义该类型变量,该类型变量就称为指针变量. C中有了指针就有了指向.指向:指针变量指向本身保存的内容(地址或指针)所表示的内存单元. C语言指针是一个特殊的变量,其里面储存的数值被解释成为内存里的一个地址. 在计算机中,所有对数据的操作,都是通过其地址进行的,指针让程序的效率更高,代码更少. 在学习指针的时间,一定要理解并区分指针的四个感念:指针的类型,指针所指向的类型,指针的值,指针本身所占

[转]C 语言指针的使用

第一章 指针的概念 指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址. 要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的 类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区.让 我们分别说明. 先声明几个指针放着做例子: 例一: (1)int *ptr; (2)char *ptr; (3)int **ptr; (4)int (*ptr)[3]; (5)int *(*ptr)[4]; 如果看不懂后几个例子的话,请参阅我前段时间贴出的文?lt;<如何

C语言指针的陷阱

C语言指针的陷阱   分类: C/Cpp 转自:http://blog.csdn.net/porscheyin/article/details/3461670 "C语言诡异离奇,陷阱重重,却获得了巨大成功!"--C语言之父Dennis M.Ritchie.Ritchie大师的这句话体现了C语言的灵活性以及广泛的使用,但也揭示了C是一种在应用时要时刻注意自己行为的语言.C的设计哲学还是那句话:使用C的程序员应该知道自己在干什么.有时用C写的程序会出一些莫名其妙的错误,看似根源难寻,但仔细

C语言指针占用字节

指针即为地址,存的是变量的地址,在同一架构下地址长度都是相同的(cpu的最大寻址内存空间),所以不同类型的指针长度都一样. 指针占用几个字节跟语言无关,而是跟系统的寻址能力有关,16为地址指针即为2个字节,32位系统是4个字节,64位系统为8个字节. 用sizeof求长度: #include<stdio.h> void main(void) { printf("%d %d %d\n",sizeof(int),sizeof(double),sizeof(char)); } 在

关于c语言 指针课堂随笔

右左法则:首先从最里面的圆括号看起,然后往右看,再往左看.每当遇到圆括号时,就应该掉转阅读方向.一旦解析完圆括号里面所有的东西,就跳出圆括号.重复这个过程直到整个声明解析完毕 1.指针的判断应该是从未定义的标识符开始阅读,而不是从括号读起,之所以是未定义的标识符,是因为一个声明里面可能有多个标识符,但未定义的标识符只会有一个 实例: int(*func)(int*p)    先从标识符func找起往右走  碰到圆括号 反转 从左走 func的指针  再往右碰到圆括号这是个函数    func是指

c语言指针学习

前言 近期俄罗斯的陨石.四月的血月.五月北京的飞雪以及天朝各种血腥和混乱,给人一种不详的预感.佛祖说的末法时期,五浊恶世 ,十恶之世,人再无心法约束,道德沦丧,和现在正好吻合.尤其是在天朝,空气,水,食品,你能告诉还有没有问题的吗?不知大难至,世人依旧忙.祸福相依,危中有机.那些高级生命,出于慈悲,会救渡我们,但是你要去思考,去发现机缘. 最近较闲,没事就学点基础知识,整天在上层晃,感觉晕的厉害,接地气.关于指针我上学的时候学过一点,我的老师说"指针很难呢",当时以为这老师挺谦虚的.后

C语言指针,你还觉得难吗?

在研究式学习-c语言程序设计指针式这样介绍的: 内存中存储变量的第一个单元的地址 称为指针,存放指针的变量称为指针变量: 变量的访问方式有: 直接访问方式:按变量名查找其首地址 间接访问方式:通过指针访问 int swap(int p,int q){ int temp; temp=p; p=q; q=temp;} 现在理解了这个函数为什么要用指针了: 因为C语言中实参变量和形参变量之间的数据传递是单向的值传递方式,虽然运用指针被调函数不能改变实参指针变量的值,但可以改变实参指针变量指向的变量的值