当前位置:首页 > 开发语言 > 正文

c语言指针例题及详解

c语言指针例题及详解

大家好,感谢邀请,今天来为大家分享一下c语言指针例题及详解的问题,以及和c语言指针用法简单举例的一些困惑,大家要是还不太明白的话,也没有关系,因为接下来将为大家分享,希...

大家好,感谢邀请,今天来为大家分享一下c语言指针例题及详解的问题,以及和c语言指针用法简单举例的一些困惑,大家要是还不太明白的话,也没有关系,因为接下来将为大家分享,希望可以帮助到大家,解决大家的问题,下面就开始吧!

文章目录:

C语言指针问题

1、在C语言中,指针的赋值是通过将变量的赋给指针变量来实现的。指针的基本概念 在C语言中,指针是一个变量,其特殊之处在于它存储的是其他变量的,而不是值本身。指针使我们能够间接地访问和修改变量的值。指针的赋值过程 当我们为指针变量赋值时,实际上是将其指向一个变量的内存赋给它。

2、假如 P 是指针 那么 *p 就代表变量。 而&a是, *p=&a 就是把给变量,当然不正确了,因为只能给指针。p2,*p1都是变量,变量之间互相赋值是正确的。

3、分析:程序没有正确区分数组和指针。在C语言中,当把字符串常量赋予指针时,该字 符串常量就存储在静态存储区中。此时数据不能用指针修改,应用数组的方式进行修改。

4、比如我们定义一个int型指针变量。int *p=NULL;初值为空。那么当while(p);时,只有p==NULL时,while循环才会结束。所以如果我们写while(p);printf。。;那么只有当p为空时,后面的printf才会。否则就一直循环,这样我们就能断p为空了。同理!p,自然就能断p不为空了。

c语言指针问题解答?

如有定义char y[4]= 321则表达式 *y+2的值是5 。分析:y是字符串数组首元素3的,*y的值就是字符3,再加上2,就是字符5(也可以说是字符5的ASC码值)。 如有定义char z[2][4]={MAT, LAB};,则表达式*(*z+2)的值是 T。

指针所指向的内存区就是从指针的值所代表的那个内存开始,长度为sizeof(指针所指向的类型)的一片内存区。以后,我们说一个指针的值是XX,就相当于说该指针指向了以XX为首的一片内存区域;我们说一个指针指向了某块内存区域,就相当于说该指针的值是这块内存区域的首。

假如 P 是指针 那么 *p 就代表变量。 而&a是, *p=&a 就是把给变量,当然不正确了,因为只能给指针。p2,*p1都是变量,变量之间互相赋值是正确的。

++(*pointer)是先取值,再自增,当前pointer指向的是位置arr[3],取值后是2,*pointer的结果是2,2再自增,当然会得出3。值得说明的是,这个括号是可以省略的,此处括号只起到增加程序可读性的作用。(2)*(pointer-2)是先移动指针,再取值。

三道C语言题目,求大神(用指针的方法)。

D选项,*x本身就错误,因为x是int类型,没法使用*操作符。A之所以错是因为代码中有一句q=NULL,也就是说q是一个空指针了,你再向里面写东西就错了,而且你在vc0中可以试一下,马上会出现一条0xc000 0005的写异常。是的,你不管给它赋值多少都是4的。

所以就是6 22 s[0]~s[5]分别为0(s[0]未初始化,初始值要看编译器对未初始局部变量处理方式而定),C,D,E,F,G,fun函数就是从G开始往前找到E,取E的下标 5 就如上面所说,sum是一个未初始化局部变量,一般来说初始值是函数栈空间中未定义的值,除非有些编译器会进行代码优化。

char* ss = 0123456789;要求这种字符串的长度是不能用sizeof的,如果用sizeof它计算出来的会是这个指针的长度,在32下,指针一般都是4个字节,所以,结果是4。计算字符串的长度,可以使用库函数strlen来计算,它计算出来的长度不包含字符串结束符\0。

int *a;表示声明一个指针变量a,注意a的值是个,不是值,这样才表示一个值(前提是a确实指向一个值,不然的话,会是一个随机数):*a,int a=10,*b=表示的是把a的给指针变量b。

void fun(char *a,char *b){ a=b; // b覆盖了a的原值,也就是b和a都是指向同一个地方,存贮a的地方 (*a)++; //a指向的内容加1,a变b。

P++,P向后指一位,指向a[1];(P++),++在后,所以先取*P的值1,取完后P再向后指一位;(++P),++在前,P先向后指一位,指向a[1],再取a[1]的值2;(*P)++,先取*P的值1,取完后*P的值再+1。

c语言指针问题,求解答

1、A、D定义为:A 定义指向函数的指针pf,所指向的函数参数为空,无返回值 D 定义指向函数的指针pf,函数参数为int,char型(不符题意,题目为int,char*),无返回值 B、D的定义为:定义函数pf,函数参数为空,返回类型为void *(void 型指针)单从函数指针的定义可排除BCD。

2、比大小的逻辑是:在第二个for循环中,循环条件是p=*q+i,即p所指向的小于等于当前行的第i个元素的。因为在这个循环中,我们只需要输出当前行的前i个元素,所以循环条件要限制在这个范围内。注意,这里的p和q都是指针变量,所以它们指向的是,而不是数组元素的值。

3、D选项,*x本身就错误,因为x是int类型,没法使用*操作符。A之所以错是因为代码中有一句q=NULL,也就是说q是一个空指针了,你再向里面写东西就错了,而且你在vc0中可以试一下,马上会出现一条0xc000 0005的写异常。是的,你不管给它赋值多少都是4的。

C语言指针问题【精粹+附图】

字符串”0ABCDEF“在内存中的存储格式,如下图所示,当调用fun函数时,语句*p=s,表示将s指向的内存赋给了指针p,此时指针p和s都指向了堆栈顶部的 0000 0001。

C语言里面的指针和数组是很有趣的。例如定义数组a[10],你可以通过a[1]访问里面的元素,也可以通过*(a+1),来访问。为什么这里可以这样用呢?ptr的类型为(int *),所以ptr在内存里面存放的就是int类型的指针,指向了某个int。

图中1处指针p没有初始化,它没有指向任何内存单元不能进行图中2处的赋值写入操作,这里会程序崩溃退出。

指针法就是通过指针运算来访问数组元素。指针是可以运算的!指针的运算分为加法和减法,注意和普通的数字加减法有很大的区别:指针的本质是一个内存,内存可以简单的认为是一整块空间,是从内存0开始连续的整数。

如有定义char y[4]= 321则表达式 *y+2的值是5 。分析:y是字符串数组首元素3的,*y的值就是字符3,再加上2,就是字符5(也可以说是字符5的ASC码值)。 如有定义char z[2][4]={MAT, LAB};,则表达式*(*z+2)的值是 T。

对于*P1=*P2 操作之前,一定要先将P1和p2先指向变量。还有*p=3之前,也要先把p指向一个变量。指针就是一个指向的变量,使用之前需要先给它赋值,也就是先将将一个变量的赋值给它,这个时候指针里面存的就是这个变量的。

关于c语言指针例题及详解到此分享完毕,希望能帮助到您。

最新文章