c语言指针问题解答?

1.p=&a;是取地址,那如何在取地址之后通过p或是*p改变a里面的值呢?可以通过p或者*p改变a里面的值吗?
2.int (*p)[ ] int *p();和int (*p)(); const int *p和int *const p都是什么意思呢?

一、P指向a存值的地址,如p指向地址的内存的值为0001,则*p=0001(为1),这时修改*p=0010,则a的值相应的被修改为2。

二、我们只能通过*p修改a的值,p是一个地址指针,更改p后 p指向了另一块内存,a的值不会被更改。

三、
int *p[] p是一个数组,数组内每个元素都是int*类型,也就是指向整型数据的指针类型,

int *p()是int (*p)()函数调用后的返回值指针

int (*p)()是一个函数的函数指针,即指向函数的地址,在调用导出函数时,经常用此方法调用函数

const int *p是指针指向的值无法改变,但是指针本身可以改变,可以重新指向一块内存

int *const p是指针不能改变,但它指向的值是可以改变的

其实还有 const还有其它用法,我们可以来修饰函数,同时修饰地址和值,如:const int * const p,这样想胡乱改就改不掉了追问

一.

       1.是我的做法不对吗,输出的结果是  8   能把过程截成图片发一下吗

       2.这个0001是按照二进制规律的吗?

二.   

       1.int (*p)()是一个函数的“函数指针”     指针指向的值无法改变,但是“指针本身可以改变”,可以重新指向一块内存     指针不能改变,但它指向的值是可以改变的 这三句话引号部分能不能再详细解释一下。。

追答

    二/十进制的转换你可以百度一下,

    函数指针就是这个函数在内存的地址

    指针就是内存地址,指针可以变,就是他能指向另一块内存,比如AB两盒子,本来指向A,现在改成指向B;常指针指向的内存地址不能变,比如AB两个盒子,p永远只能指向A,不能认为的把它改成B,值即为A盒子内装的东西,装什么由你定,你可以装水,也可以装米

温馨提示:内容为网友见解,仅供参考
第1个回答  2019-12-02
1.
能通过指针p改变a里面的值,前提是a不是常量且指针p不是指向常量的指针(只读型指针)。举例:
a、
int a=1,*p=&a;
//此时a等于100了
*p=100;
b、
int a=1;
const int *p=&a;
//不能通过p改变a的值,因为p是只读型指针(只读型指针可以指向变量,但不能通过指针修改它指向的变量的值,就好像在它看来,它好像指向的是一个常量)
//*p=100;
c、
const int a=1,*p=&a;
//同样不能,因为a是常量且p是只读型指针
//*p=100;
2.
int (*p)[n]是指向数组的指针(数组指针),p指向的数组需有n个int型元素,如:
int a[2],b[2][2],(*p)[2];
则p=&a;p=b;p=b+1;都行。
int *p();是函数声明。函数名是p,不需要参数,需返回一个int类型的指针。
int (*p)();是指向函数的指针(函数指针),p可以指向的函数需满足无参且返回类型为int,如:
int f()
{
}
int (*p)()=f;可以。
const int *p;是将p定义为指向常量的指针(只读型指针),这样就不能通过指针p改变它指向的变量的值,就好像它指向的是一个常量,前面已有这样的例子了。

int * const p是将指针p自己定义为常量,即它永远指向同一个变量或常量,不能改变p自己的值(即除了初始化时,不能用=为它赋值),因此必须在定义时初始化p,如:
int a=1,c;
const int b=2,d=3;
则int * const p=&a;int * const p=&b;都行,而p=&c;p=&d;都不行。本回答被提问者和网友采纳

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'。分析:z是二维字符...

C语言中的指针问题到底是怎么回事~
指针所指向的内存区就是从指针的值所代表的那个内存地址开始,长度为sizeof(指针所指向的类型)的一片内存区。以后,我们说一个指针的值是XX,就相当于说该指针指向了以XX为首地址的一片内存区域;我们说一个指针指向了某块内存区域,就相当于说该指针的值是这块内存区域的首地址。 指针所指向的内存区和指针所指向的...

C语言指针问题
假如 P 是指针 那么 *p 就代表变量。 而&a是地址, *p=&a 就是把地址给变量,当然不正确了,因为地址只能给指针。p2,*p1都是变量,变量之间互相赋值是正确的。“原因是被赋值的指针变量前不能再加*说明符”这句话的意思是:如果 给 指针P加上“*”,那么它就变成 了变量,代表的意义...

c语言 指针问题 有点看不懂 能帮忙解答一下正确答案中的 每一步运算...
答案为B

c语言指针问题,求解答
A、D定义为:A 定义指向函数的指针pf,所指向的函数参数为空,无返回值 D 定义指向函数的指针pf,函数参数为int,char型(不符题意,题目为int,char*),无返回值 B、D的定义为:定义函数pf,函数参数为空,返回类型为void *(void 型指针)单从函数指针的定义可排除BCD。其次,指针赋值 函数名与...

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

c语言指针问题
(2),对于*P1=*P2 操作之前,一定要先将P1和p2先指向变量。还有*p=3之前,也要先把p指向一个变量。指针就是一个指向地址的变量,使用之前需要先给它赋值,也就是先将将一个变量的地址赋值给它,这个时候指针里面存的就是这个变量的地址。理解了指针的概念,上面这些问题就好理解了~...

问两道有关c语言字符指针的问题,请将程序每一步的意思告诉我,谢谢啦...
第一题答案:B。理由:*s与*t都是取出此时地址存储的值,while()语句里面的意思是,当指针s与t都不为空并且s指向的值等于t指向的值。。。当s或者t为空或者t与s指向的值不同时,while()结束,返回此时s指向的值减去t指向的值,所以为比较两个字符串的大小;第二题答案:A。理由:x的地址赋值...

初学C语言对C指针的疑惑
&是C的取地址运算符。3、我想在你对汇编很熟悉的基础上,通过上述说明,不难体会定义指针的数据类型对于指针的作用了吧,也就是说某一种数据类型的指针在一般应用情况下,只用于记录具有相同数据类型变量和存储空间的地址。这部分东西本身就是不容易理解,不知道说了半天是不是能帮上你一点。我想你有...

C语言指针问题
1.概念问题:指针是指存放地址值的变量或常量;指针与一般变量或常量的区别,在于它不直接存储数值,而是存放被存储数值的地址,属于间接存放,所以不少初学者感觉学习困难。 比如:int a=2,b,c,*ptr; ptr=&a;表示将指针ptr指向变量a,存放a的地址,假设是2000H,而指针变量ptr本身也要有地址,...

相似回答