c语言中指针中(c语言指针中*p)

今天给各位分享c语言指针中的知识,其中也会对c语言指针中*p进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

1、C语言中指针的用法介绍(2)2、C语言中指针是什么3、C语言中的指针4、C语言中的指针是什么意思?

C语言中指针的用法介绍(2)

如果上例中,ptr是被减去5,那么处理过程大同小异,只不过ptr的值是被减去5乘 sizeof(int),新的ptr指向的地址将比原来的ptr所指向的地址向低地址方向移动了20个字节。

总结一下,一个指针ptrold加上一个整数 n后,结果是一个新的指针ptrnew,

ptrnew的类型和ptrold的类型相同,ptrnew所指向的类型和ptrold所指向的类型也相同。ptrnew的值将比ptrold的值增加了 n乘sizeof(ptrold所指向的类型)个字节。就是说,ptrnew所指向的内存区将比ptrold所指向的内存区向高地址方向移动了 n乘 sizeof(ptrold所指向的类型)个字节。

一个指针ptrold减去一个整数 n后,结果是一个新的指针ptrnew,ptrnew的类型和ptrold的类型相同,ptrnew所指向的类型和ptrold所指向的类型也相同。ptrnew的值将比ptrold的值减少了 n乘 sizeof(ptrold所指向的类型)个字节,就是说, ptrnew所指向的内存区将比ptrold所指向的内存区向低地址方向移动了n乘sizeof(ptrold所指向的类型)个字节。

第三章。运算?amp;和*

这里是取地址运算符,*是…书上叫做”间接运算符”。

a的运算结果是一个指针,指针的类型是 a的类型加个*,指针所指向的类型是a的类型,指针所指向的地址嘛,那就是a 的地址。*p的运算结果就五花八门了。总之*p的结果是p所指向的东西,这个东西有这些特点:它的类型是p指向的类型,它所占用的地址是p所指向的地址。

例五:

int a=12;

int b;

int *p;

int **ptr;

Generated by Foxit PDF Creator ? Foxit Software

For evaluation only.p=a;//a的结果是一个指针,类型是 int*,指向的类型是 int,指向的地址是a的地址。*p=24;//*p的结果,在这里它的类型是 int,它所占用的地址是p所指向的地址,显然,*p就是变量a。ptr=p;//p的结果是个指针,该指针的类型是p的类型加个*,在这里是 int**。该指针所指向的类型是p的类型,这里是 int*。该指针所指向的地址就是指针p自己的地址。

*ptr=b;//*ptr是个指针,b的结果也是个指针,且这两个指针的类型和所指向的类型是一样的,所以用b来给*ptr赋值就是毫无问题的了。**ptr=34;//*ptr的结果是ptr所指向的东西,在这里是一个指针,对这个指

针再做一次*运算,结果就是一个 int 类型的变量。

第四章。指针表达式。

一个表达式的最后结果如果是一个指针,那么这个表达式就叫指针表达式。

下面是一些指针表达式的例子:

例六:

int a,b;

int array[10];

int *pa;

pa=a;//a是一个指针表达式。

int **ptr=pa;//pa也是一个指针表达式。

*ptr=b;//*ptr和b都是指针表达式。

pa=array;

pa++;//这也是指针表达式。

例七:

char *arr[20];

char **parr=arr;//如果把arr 看作指针的话,arr 也是指针表达式

char *str;

str=*parr;//*parr 是指针表达式

str=*(parr+1);//*(parr+1)是指针表达式

str=*(parr+2);//*(parr+2)是指针表达式

由于指针表达式的结果是一个指针,所以指针表达式也具有指针所具有的四个要素:指针的类型,指针所指向的类型,指针指向的内存区,指针自身占据的内存。

好了,当一个指针表达式的结果指针已经明确地具有了指针自身占据的内存的话,这个指针表达式就是一个左值,否则就不是一个左值。

在例七中,a不是一个左值,因为它还没有占据明确的内存。*ptr是一个左值,因为*ptr 这个指针已经占据了内存,其实*ptr 就是指针 pa,既然 pa 已经在内存中有了自己的位置,那么*ptr当然也有了自己的位置。

第五章。数组和指针的关系

Generated by Foxit PDF Creator ? Foxit Software

For evaluation only.如果对声明数组的语句不太明白的话,请参阅我前段时间贴出的文?lt;如何理解c 和c++的复杂类型声明。数组的数组名其实可以看作一个指针。看下例:

例八:

int array[10]={0,1,2,3,4,5,6,7,8,9},value;

value=array[0];//也可写成:value=*array;

value=array[3];//也可写成:value=*(array+3);

value=array[4];//也可写成:value=*(array+4);

上例中,一般而言数组名array代表数组本身,类型是 int [10],但如果把array看做指针的话,它指向数组的第 0个单元,类型是 int *,所指向的类型是数组单元的类型即 int。因此*array等于 0 就一点也不奇怪了。同理,array+3 是一个指向数组第3个单元的指针,所以*(array+3)等于3。其它依此类推。

例九:

例九:

char *str[3]={

“Hello,this is a sample!”,

“Hi,good morning.”,

“Hello world”

};

char s[80];

strcpy(s,str[0]);//也可写成strcpy(s,*str);

strcpy(s,str[1]);//也可写成strcpy(s,*(str+1));

strcpy(s,str[2]);//也可写成strcpy(s,*(str+2));

上例中,str是一个三单元的数组,该数组的每个单元都是一个指针,这些指针各指向一个字符串。把指针数组名 str 当作一个指针的话,它指向数组的第 0号单元,它的类型是char**,它指向的类型是char *。

*str也是一个指针,它的类型是char*,它所指向的类型是char,它指向的地址是字符串”Hello,this is a sample!”的第一个字符的地址,即’H’的地址。

c语言中指针中(c语言指针中*p)

C语言中指针是什么

我们都知道:C语言中的数组是指 一类 类型,数组具体区分为 int 类型数组,double类型数组,char数组 等等。同样指针 这个概念也泛指 一类

数据类型,int指针类型,double指针类型,char指针类型等等。

通常,我们用int类型保存一些整型的数据,如 int num = 97 , 我们也会用char来存储字符: char ch = ‘a’。

我们也必须知道:任何程序数据载入内存后,在内存都有他们的地址,这就是指针。而为了保存一个数据在内存中的地址,我们就需要指针变量。

因此:指针是程序数据在内存中的地址,而指针变量是用来保存这些地址的变量。

C语言中的指针

先给你解释一下指针变量和指针,还有指针变量指向的变量的分别意思。

指针变量的值是指针,指针就是地址;指针变量指向的变量就不是地址了,而是一个具体的变量。

看一个很简单的程序段:

main()

{

int

a=5,*p=a;

printf(“%d”,*p);}

在这里,定义了指针变量p,指针变量p又被赋予了a的地址,此时a的地址就是指针变量p的值;而*p就是指针变量指向的变量,此处是整型变量,由于p被赋予的是a的地址,所以说这个变量就是a,即*p=a.接着因为a被赋予了5,也就是*p就是为5.

这样你就可以理解*n=0是什么意思了,也就是n是一个指针变量,这个指针变量指向的变量是一个整型变量,*n就是一个整型变量,*n这个整型变量被赋值为0;

然后是你的第二个问题:*n++,因为*和++是同优先级,并且是自右向左运算(你查下书的附录可知),所以说,相当于*(n++),意思是取了*n这个值之后,再n++,即往下一个地址去,然后接着取这个地址的值;再n++….一直往下取。

而(*n)++呢,就是先取了*n这个值之后,然后再把*n这个值自增1.

如果不明白,建议多看几遍书哦!

C语言中的指针是什么意思?

其实与其你在这里问,还不如看一看c语言教科书,上面写的都很详细

以下是谭浩强版的

在计算机中,所有的数据都是存放在存储器中的。一般把存储器中的一个字节称为一个内存单元,不同的数据类型所占用的内存单元数不等,如整型量占2个单元,字符量占1个单元等,在前面已有详细的介绍。为了正确地访问这些内存单元,必须为每个内存单元编上号。根据一个内存单元的编号即可准确地找到该内存单元。内存单元的编号也叫做地址。

既然根据内存单元的编号或地址就可以找到所需的内存单元,所以通常也把这个地址称为指针。

内存单元的指针和内存单元的内容是两个不同的概念。

可以用一个通俗的例子来说明它们之间的关系。我们到银行去存取款时,

银行工作人员将根据我们的帐号去找我们的存款单,

找到之后在存单上写入存款、取款的金额。在这里,帐号就是存单的指针,

存款数是存单的内容。对于一个内存单元来说,单元的地址即为指针,其中存放的数据才是该单元的内容。在C语言中,允许用一个变量来存放指针,这种变量称为指针变量。因此,一个指针变量的值就是某个内存单元的地址或称为某内存单元的指针。

严格地说,一个指针是一个地址,是一个常量。而一个指针变量却可以被赋予不同的指针值,是变量。但常把指针变量简称为指针。为了避免混淆,我们中约定:“指针”是指地址,是常量,“指针变量”是指取值为地址的变量。定义指针的目的是为了通过指针去访问内存单元。

既然指针变量的值是一个地址,那么这个地址不仅可以是变量的地址,也可以是其它数据结构的地址。在一个指针变量中存放一个数组或一个函数的首地址有何意义呢?

因为数组或函数都是连续存放的。通过访问指针变量取得了数组或函数的首地址,也就找到了该数组或函数。这样一来,凡是出现数组,函数的地方都可以用一个指针变量来表示,只要该指针变量中赋予数组或函数的首地址即可。这样做,将会使程序的概念十分清楚,程序本身也精练,高效。在C语言中,一种数据类型或数据结构往往都占有一组连续的内存单元。

用“地址”这个概念并不能很好地描述一种数据类型或数据结构,而“指针”虽然实际上也是一个地址,但它却是一个数据结构的首地址,它是“指向”一个数据结构的,因而概念更为清楚,表示更为明确。

这也是引入“指针”概念的一个重要原因。

c语言中指针中的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c语言指针中*p、c语言中指针中的信息别忘了在本站进行查找喔。

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年4月9日 23:30:13
下一篇 2024年4月9日 23:37:56

相关推荐

  • c语言改写模式,c语言实现修改功能

    c语言程序修改? 1、这个程序有4个错误,我都加粗了,第一个是m没有赋初值,第二个是while表达式中的ch=getchar()需要括号括起来,第三个是m=m*10+ch-0中的0也需要用单引号括起来,第四个是第2个while中为m!=0。 2、define容易造成误会,因为不符合一般的编程习惯,false 0, true 1;scanf放在你的那个地方是达…

    2024年5月23日
    3900
  • c语言控制代码的换码序列,c语言交换代码

    求C语言编程大神解答一下下面这个编程代码? k==5,用5去除125余0,所以r=125%5中r为0。由于!0为1,所以执行while循环体:先打印出5(k的值),再n=n/k==125/5=25;由于251则再打印出*号。这一循环结果输出是5*。 下面是我的代码,三个函数分别对应三个问题。 在实现基本要求的前提下,拓展了可以从键盘输入的功能,以下为各题代码…

    2024年5月23日
    5600
  • c语言扫描io脚状态,c语言端口扫描

    求51单片机的上升沿和下降沿C语言检测程序列子,端口就是普通IO口。 上升沿触发是当信号有上升沿时的开关动作,当电位由低变高而触发输出变化的就叫上升沿触发。也就是当测到的信号电位是从低到高也就是上升时就触发,叫做上升沿触发。 单片机怎么计算1s内下降沿的个数的C语言程序或者计算两个下降沿的时间(检测脉冲频率)计算1s内下降沿的个数方法是,一个定时器设置定时1…

    2024年5月23日
    4400
  • c语言mallloc使用的简单介绍

    C语言中使用malloc必须加#includemallo.h? 1、在C语言中使用malloc函数进行动态内存分配。malloc的全称是memory allocation,中文叫动态内存分配。原型:extern void malloc(unsigned int num_bytes);功能:分配长度为num_bytes字节的内存块。 2、你可以看一下C语言那本…

    2024年5月23日
    4400
  • c语言三位小数,C语言三位小数

    怎样用C++语言输出精确到小数点后三位的数? 1、用C++语言输出精确到小数点后三位的数,可以参考下面给出的代码:coutsetiosflags(ios:fixed)setprecision(3)。其中 setiosflags中set是设置的意思。ios是iostream的缩写,即输入输出流。flags是标志的意思。 2、要精确到小数点后若干位,则数据类型为…

    2024年5月23日
    7300
  • c语言21点游戏,二十一点游戏代码c语言

    如何使用C语言编写简单小游戏? 1、数学知识:长方形的面积S=a*b 长方形周长L=2*(a+b)其中a b分别为长方形的宽和高。算法分析:长方形面积及周长均依赖于宽和高,所以先要输入宽高值,然后根据公式计算,输出结果即可。 2、/*也不知道你是什么级别的,我是一个新手,刚接触编程语言,以下是我自己变得一个小程序,在所有c语言的编译器(vc++0、turbo…

    2024年5月23日
    6400
  • c语言当中的null,C语言当中的符号

    C/C++中,NULL和null的区别是什么? nul 和 null要看编译器,不同的编译器有所区别。 所以C或者C++中都使用一个特殊定义NULL表示无效值,其本质就是未定义具体数据类型的0值。 null是是什么都没有的意思。在java中表示空对象。 本意是“空的;元素只有零的”意思。计算机中通常表示空值,无结果,或是空集合。\x0d\x0a在ASCII码…

    2024年5月23日
    4500
  • 包含c语言对txt文件命名的词条

    如何在C语言编程里面修改源文件名字 如果你是在WINDOWS的话,简单了,随便用个编辑器,比如记事本,然后写c源程序,保存到你想要保存的位置。如果你在DOS下,可以用edit,写好以后,按alt键,选择文件菜单,然后保存。 用open打开文件,注意操作模式使用“修改”或者“添加” 用write或者fprintf向文件中写入你的内容。 用close关闭文件。 …

    2024年5月23日
    4900
  • 学c语言编程,学c语言编程用什么软件

    编程开发必须要学C语言吗? 1、要学习。编程开发的学习内容主要包括c语言、python和c+语言。C语言作为一种简单灵活的高级编程语言,它是一个面向过程的语言,一般是作为计算机专业的基础入门语言课程。 2、C语言。对于刚接触编程的人来说,先学习C语言是非常重要的。C语言可以说是是计算机编程语言的鼻祖,其他的编程语言几乎全是由C语言变化衍生出来的。 3、不需要…

    2024年5月23日
    3500
  • c语言用string定义字符串,c语言中用string类型来处理字符串类型

    C++怎样定义定义字符串 1、第一是字符数组来表示字符串。用下面的语句声明:char a[10];C语言中字符数组与字符串的唯一区别是字符串末尾有一个结束符\0,而字符数组不需要。 2、在C中定义字符串有下列几种形式:字符串常量,char数组,char指针 字符串常量 即:位于一对双括号中的任何字符。双引号里的字符加上编译器自动提供的结束标志\0字符,作为 …

    2024年5月23日
    4300

发表回复

登录后才能评论



关注微信