当前位置:首页 » 编程语言 » c语言善于利用指针学习笔记
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言善于利用指针学习笔记

发布时间: 2022-04-25 20:06:31

A. c语言指针用法

1、使用场景

使用指针时,必须将它指向一个变量的地址或者为它分配空间方能使用,如下所示:

#include<stdio.h>

#include <stdlib.h>

int main(int argc, char const *argv[])

{

int a[5]={0,1,2,3,4};

int *b,*d;

int c=2;

int *e=a; //e指向a数组首地址

//*b=2; 无法直接初始化

//printf("%d ", *b);

e=e+2; //移动两个地址单元

d=&c; //d指向c的地址来表示值

c=4; //修改原c变量的值,d指针的值会发生改变

b=(int *)malloc(sizeof(int));//为b分配一个int型空间来直接存储

*b=2;//分配空间后可以直接赋值了

printf("this is e,b,c,d :%d %d %d %d ",*e,*b,c,*d);

2、类型说明

(1)int *a :表示一个指向int型变量的指针,指向的是变量的地址单元

(2)char *b:表示一个指向char变量的指针

*a表示的是这个指针指向地址的值,a为此指针本身的地址,这点要明确,一般用*(a+1)、*(a+2)来表示值,如:

int nums[5]={0,1,2,3,4};

int *a=nums;

printf("%d %d %p ",*a,*(a+1),a);

(1)c语言善于利用指针学习笔记扩展阅读:

指针的运算

指针指向变量地址,若原变量的内容发生了变化,它本身也会发生变化,指针之间的运算一般为值运算和地址运算

(1)值运算:直接通过*运算方式,像a+*(a+1),结果为第一个元素与第二个元素相加。

int nums[5]={0,1,2,3,4};

int *a=nums;

(2)地址运算:通过a+i的方式.指针会指向a的下i个地址。

int nums[5]={0,1,2,3,4};

int *a=nums;

a=a+2;

printf("%d ",*a);

结果输出2。

参考资料来源 :指针-网络

B. C语言指针的用法是什么

指针是C语言中广泛使用的一种数据类型。运用指针编程是C语言最主要的风格之一。

利用指针变量可以表示各种数据结构;能很方便地使用数组和字符串;并能象汇编语言一样处理内存地址,从而编出精练而高效的程序。指针极大地丰富了C语言的功能。

学习指针是学习C语言中最重要的一环,能否正确理解和使用指针是我们是否掌握C语言的一个标志。

同时,指针也是C语言中最为困难的一部分,在学习中除了要正确理解基本概念,还必须要多编程,上机调试。只要作到这些,指针也是不难掌握的。

C. 论述C语言中指针的概念和作用,并举例说明

1、指针概念:变量的地址(计算机内存字节的编号)叫做指针,存放变量地址的变量叫指针变
量,
简言之,指针是用来存放地址的。
2、作用:指向这个变量或数组的首地址,是变量的间接引用方式。其值如果改变,变量的值或数组元素的值也会跟着改变。程序对变量的操作实际上是对变量所在的存储空间读取和写入数据。方便对变量的操作。
举例说明:
int
a=3;/*定义一个整型变量a,并赋初值3*/
int
*p;/*定义一个指针变量P*/
p=&a;/*让p指向a的首地址,也就是a的地址*/
程序为a分配一个2个字节的存储单元,假如2个字节的地址分别为(ABCD1和ABCD2,唯一),那么p里面放的值就是ABCD1,不是3。这时可通过p直接引用a,实际上*p=3。以后不管a存放在内存中的哪个地方,只用通过调用p就可以引用a。这时如果令*p=4,则最后的a值也为4。对于数组,指针是指向数组的首地址。

D. c语言中指针怎么使用

1、使用场景

使用指针时,必须将它指向一个变量的地址或者为它分配空间方能使用,如下所示:

#include<stdio.h>

#include <stdlib.h>

int main(int argc, char const *argv[])

{

int a[5]={0,1,2,3,4};

int *b,*d;

int c=2;

int *e=a; //e指向a数组首地址

//*b=2; 无法直接初始化

//printf("%d ", *b);

e=e+2; //移动两个地址单元

d=&c; //d指向c的地址来表示值

c=4; //修改原c变量的值,d指针的值会发生改变

b=(int *)malloc(sizeof(int));//为b分配一个int型空间来直接存储值

*b=2;//分配空间后可以直接赋值了

printf("this is e,b,c,d :%d %d %d %d ",*e,*b,c,*d);

2、类型说明

(1)int *a :表示一个指向int型变量的指针,指向的是变量的地址单元

(2)char *b:表示一个指向char变量的指针

*a表示的是这个指针指向地址的值,a为此指针本身的地址,这点要明确,一般用*(a+1)、*(a+2)来表示值,如:

int nums[5]={0,1,2,3,4};

int *a=nums;

printf("%d %d %p ",*a,*(a+1),a);

(4)c语言善于利用指针学习笔记扩展阅读:

指针的运算

指针指向变量地址,若原变量的内容发生了变化,它本身也会发生变化,指针之间的运算一般为值运算和地址运算

(1)值运算:直接通过*运算方式,像a+*(a+1),结果为第一个元素与第二个元素相加。

int nums[5]={0,1,2,3,4};

int *a=nums;

(2)地址运算:通过a+i的方式.指针会指向a的下i个地址。

int nums[5]={0,1,2,3,4};

int *a=nums;

a=a+2;

printf("%d ",*a);

结果输出2。

参考资料来源 :指针-网络

E. 关于C语言指针问题学习,怎么学好C语言的指针

指针,就像学校的信箱一样。你跟别人说,给我写信,寄到XXXX大学509号信箱,别人怎么知道509信箱是啥?不过他不用管,只管把信发过来,到时候你去箱子里取东西就是了。只要这么想,就拿指针当信箱吧,往那里送信行了,其它不管,一切问题就简单了。 c与机器联系紧密,抽象程度不是太高,所以机器层面的地址也拿过来了,改名叫指针。 遇到指针,要读成“地址变量”,其实指针就是一个存放整数(地址就是一个整数)的变量而已,多少级都是如此。 比如,有一间房子,它的地址是:人民路108号。这个房子相当于一个变量。如果它是普通变量,则房子里可能今天住的是张三,明天住的是李四。张三、李四就是这个变量的值。通过访问这间房子,我们可以直接找到张三或李四。如果它是一个指针变量,则房子里不住具体的人,而是放一张纸条,上面写:‘南京东路77号’。‘南京东路77号’是一个什么东西?是一个地址。通过该地址,我们继续找,结果在‘南京东路77号’里找到张三。变量的存储的值可以改变,指针变量的值同样可以变更:过一天,我们再去访问这个房子,纸条变了‘珠海路309号’,通过它,我们找到的是另一个人。 “&和*”,它们是一对相反的操作,’&’取得一个物的地址(也就是指针本身),’*’得到一个地址里放的物(指针所指向的物)。这个东西可以是值(对象)、函数、数组、类成员(class member)等等。 理解什么是'多级指针': 有一个事件:C住在了某酒店的房间里,他的房间号码是1001。B知道C的房间号码是1001,而B住的房间号码是1081。现在A想要找到C,但是A不知道C的房间号码是多少。但是A知道B一定知道C的房间号码。所以A去1081房间去找B,A问B:C的房间号码是多少。B告诉A:C的房间号码是1001。这时候A就可以直接去1001号房间找到C。

F. c语言学习方法,指针怎么学非常难吗

我觉得你首先得明白什么是指针。指针就是内存中存放变量的地址。是直接和内存打交道的。
在C语言中,你声明一个变量int a = 3;这个变量a在会占用一块内存区域,标示这个内存区域的就是内存地址,比如是0x20003000,在这个地址中储存了变量的数值3. 在C语言中就是用指针来表示这个地址的。对应前例,如果再声明一个指针int *b; b就被称作指针变量,专门存放地址指针的。

b=&a;就把存放变量的内存地址0x20003000赋值给了b,如果对这个地址的内容进行修改,*b=4;
那么就相当于把之前a变量的内容修改了,此时,a就变为了4.

你可以把变量看做代号,例如“张三家”,指针就是绝对的地址,“XX市XX路XX号XX单元XX楼xx门”。
张三家的茶几,也就是“XX市XX路XX号XX单元XX楼xx门”的茶几。当张三家搬走后,新来了李四家。那么“XX市XX路XX号XX单元XX楼xx门”的茶几,就是李四家的茶几了。

G. C语言指针基础的笔记

p1 p2本来没有任何关系的,执行了以上语句之后,p1 p2是两个不同的指针,但是这两个指针指向了相同的内容,就是整数a

H. 如何正确地使用C语言的指针

指针是C语言中的精髓,它能直接对物理地址进行访问,具有双重功能,是嵌入式设计中必不可少的一门语言。C语言功能强大的主要原因就是具有指针结构。指针是一种特殊的数据类型,直接指向目标的存储地址,实现直接访问对象存储空间的功能。
1、指针指向变量:
下面有这样一个代码块:
int main()
{int a=10;int b=15;test(a,b);printf("a=%d,b=%d\n",a,b);}
void test(int x,int y)
{int tmp;tmp=x;x=y;y=tmp;}
最后输出的结果还是a=10,b=15。因为在函数调用时,实参和形参之间只是值传递。但我们使用指针结果就不一样了,如:

int main()
{int a=10;int b=15;test(&a,&b);printf("a=%d,b=%d\n",a,b);return 0;}
void test(int * x,int *y)
{int tmp;tmp=*x;*x=*y;*y=tmp;}
输出结果a=15,b=10。变量a和b的值发生了交换。这是因为我们利用指针访问变量的存储单元,间接修改变量的值。
2、指针指向数组:
定义一个数组并初始化,int array[5]={2,5,12,7,8},定义一个指针变量并把数组的地址赋给它,int *p=array,注意数组名就是数组的地址,而且数组的地址就是首元素的地址。因此我们的指针变量就指向了数组的首元素,*p=2。如果把(p+1),那么指针变量就指向了数组的下一个元素5,因此我们可以利用指针来遍历数组的各个元素:
int main()
{int array[5]={2,5,12,7,8};int *p =array;for(int i=0;i<5;i++){printf("array[%d]=%d\n",i,*(p+i));}return 0;}
3、指针指向字符串:
我们都知道用数组存储字符串,如char name[20]="jack",上面已经简单讲述了指针指向数组,所以我们可以这样做,char *name="jack",指针变量指向字符串的首个字符并可以依次访问字符串的各个字符。
4,指针指向函数:
我们需要知道怎样表示一个指针指向函数,说白了就是语法要正确,下面我也取一个代码块来说明一下:
int sum(int x,int y)
{return x+y;}
int main()
{int a=5;int b=6;int (*p)(int,int);p=sum;int result=(*p)(a,b);printf("The result is %d\n",result);return 0;}
不难发现上面代码块里语句(*p)(a,b)可以用p(a,b)来代替,因为p和sum就是一样的,只是用前者可能更容易理解一点。而我们要知道怎样定义一个指针指向函数,int (*p)(int,int)这是固定写法,前面的int是指针将来指向的函数的返回值的类型,如果没有函数返回值,那就是void,后面括号里的两个int 当然就是指针将指向的函数的形参。指针指向函数用起来确实有点抽象,要想熟练运用的话就多去做一些这方面的练习吧!
5,指针指向结构体:
我们首先首先定义一个结构类型,
struct student
{
char *name;
int ages;
};
再根据类型定义结构体变量 struct student stu={"Rose",15};定义一个指针指向结构体类型,struct student *p;把结构体变量stu的地址赋给指针变量p,p=&stu;我们可以有3种方式来访问结构体中的属性ages:
stu.ages=15;(*p).ages=15;p->ages=15;不过第三种方式在C语言中只能用来指向结构体。
综上所述,指针的基本用法就是这几种,还有些用法不常见的在此就一一例举了,有兴趣的话可以去翻阅相关的资料。

I. 关于C语言中的指针学习

printf("%d\n",(*pointer_1)++); //先输出(*pointer_1)的值100,之后,再对(*pointer_1)即a做自增运算,a的值变为101。
printf("%d\n",*pointer_1++); //先输出*pointer_1的值101,之后,再对pointer_1做自增运算,pointer_1指向内存中变量a的下一个内存空间!因为此句比上句少一括号,故自增的对象不同。
printf("%d\n",*pointer_1); //输出pointer_1指向的空间的值。但a之后内存值不确定!

*pointer_1++ //先计算*pointer_1,再计算pointer_1++
(*pointer_1)++ //先计算*pointer_1,再对pointer_1指向的变量进行++
*(pointer_1++) //同第一个,先计算*pointer_1,再计算pointer_1++