c语言指针问题解答?

   更新日期:2024.06.02
一、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.
能通过指针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;都不行。

  • 19195089394 :C语言指针问题
    欧崔傅4284 :答:假如 P 是指针 那么 *p 就代表变量。 而&a是地址, *p=&a 就是把地址给变量,当然不正确了,因为地址只能给指针。p2,*p1都是变量,变量之间互相赋值是正确的。“原因是被赋值的指针变量前不能再加*说明符”这句话的意思是:如果 给 指针P加上“*”,那么它就变成 了变量,代表的意义...
  • 19195089394 :请大家给我解答一个c语言的指针问题
    欧崔傅4284 :答:int a=12;int *b=&a;//正确 ,因为b是指针,需要保存一个地址,用&变量的地址,所以正确。int *b=12;//错误 ,因为12的数据类型是int类型,你左侧是一个 int *的类型,类型不匹配,所以错误,可以写成 int *b = (int *)12 ; 但是程序运行会出错,因为12这个地址,一般被操作系统设置为...
  • 19195089394 :C语言指针问题(初学者)
    欧崔傅4284 :答:1.概念问题:指针是指存放地址值的变量或常量;指针与一般变量或常量的区别,在于它不直接存储数值,而是存放被存储数值的地址,属于间接存放,所以不少初学者感觉学习困难。比如:int a=2,b,c,*ptr; ptr=&a;表示将指针ptr指向变量a,存放a的地址,假设是2000H,而指针变量ptr本身也要有地址,假...
  • 19195089394 :有一个关于c语言指针的题,求详解,具体见内容
    欧崔傅4284 :答:答案是D 在循环开始,ptr指向了数组的首地址,经过一次循环,指针指向了下一个字节。第一次循环 ptr指向该数组第一个字节,通过printf函数,输出了指针所指的字符串“ABCDE”一次循环,每次指针后移一个字节。然后输出该字符串。参考资料:p
  • 19195089394 :c语言指针问题,求解答
    欧崔傅4284 :答:首先 函数指针的定义 A、D定义为:A 定义指向函数的指针pf,所指向的函数参数为空,无返回值 D 定义指向函数的指针pf,函数参数为int,char型(不符题意,题目为int,char*),无返回值 B、D的定义为:定义函数pf,函数参数为空,返回类型为void *(void 型指针)单从函数指针的定义可排除BCD。其次...
  • 19195089394 :C语言的数组和指针问题,谢谢高手的解答!
    欧崔傅4284 :答:所以B是一个2级常指针,同样指向二维数组的第一个元素B[0],而B[0]是一个一维数组。总结,问题的关键在于,数组名相当于一个指向于这个数组第一个元素的指针。3)所以,int A[2][3][4]={0};A是一个三维数组,其中A[0]和A[1]都是它的元素,A[0]是第一个元素。所以, A是一个三级...
  • 19195089394 :c语言问题,关于指针的问题
    欧崔傅4284 :答:显然p是一个指针变量。while()循环括号里的返回值,为0或NULL时,while循环直接结束。一、比如我们定义一个int型指针变量。int *p=NULL;初值为空。那么当执行while(p);时,只有p==NULL时,while循环才会结束。所以如果我们写while(p);printf。。。;那么只有当p为空时,后面的printf才会执行...
  • 19195089394 :C语言关于指针的三道简单选择题,来个大神解释下,谢谢
    欧崔傅4284 :答:明显正确。所以只有C错误 答案为C 这个题库正确答案都给不出来,显然不值得你去练习,建议换地方做题~第二题那么明显的大小为10的数组下标最多为9这种题目都答案给错,可见出题者的水平,第一题无论怎样都不可能离开C和D 答案居然为B太侮辱智商。不必纠结了 想学习指针去看C指针与陷阱这本书 ...
  • 19195089394 :C语言指针问题
    欧崔傅4284 :答:首先,你提到的所有p应该是一个类型,也就是 int *p 即,整型指针类型,该类型与一维整型数组等效,即int []然后一个个来 第一个,只有用在定义的时候才是对的,int *p=a;意思是定义int*类型的p,初始化为a。等效于int *p;p=a;第二个,先p+5,然后取值,等效于p[5],在p=a下,也就...
  • 19195089394 :c语言指针问题
    欧崔傅4284 :答:因此在C语言中,将地址形象化地称为 “指针”。意思是通过它能找到以它为地址的内存单元(例如根据地址2000就能找到变量i的存储单元,从而读取其中的值)。一个变量的地址称为该变量的“指针”。例如,地址2000是变量i的指针。如果有一个变量专门用来存放另一变量的地址(即指针),则它称为“指针变量”...
  • 相关链接

    欢迎反馈与建议,请联系电邮
    2024 © 视觉网