为什么c语言不能用指针?

作者&投稿:圭倩 (若有异议请与网页底部的电邮联系)
~ C语言里,所有变量空间都是在程序运行之初向系统申请的,包括指针,除了一些动态申请方式如malloc函数。没有申请的空间系统是不允许读写的。那么如果一个数组大小是变量定义,则在程序运行前不能确定数组大小,也就无法申请,故不允许。所以,解决的办法便是通过malloc函数,即
int a[n];
可改为
int* const a = (int*)malloc(sizeof(int)*n);
这样a变量就完全可以当作一个数组直接使用了,包括a[1]之类的。因为“[]”中括号运算符做的只是偏移其内的地址数并取值。如:
a[1]
等价于
*(a + 1)
而const修饰符在星号之后,则表示指针在被声明后不能改变,即只能指向这个获取的空间,完全符合数组的性质
综上所述,如果需要变量控制长度的一个数组,类似“int a[n];”的,可改成“int* const a = (int*)malloc(sizeof(int)*n);”并直接作为数组以[]方式使用。const可以去掉,但要保证使用时不改变a的指向


关于C语言指针的问题
但我看那些C语言方面的程序题目,用到指针的地方并不多,我也知道指针就是地址,但不知道具体用法,请问,指... 书上和很多专业人士都说,指针是C语言的主要特点,没掌握指针就没有入门。但我看那些C语言方面的程序题目,用到指针的地方并不多,我也知道指针就是地址,但不知道具体用法,请问,指针在C语言中具体有什么...

...而不能用这个方法。。还有如果用全局变量该怎么写
因为在函数中的参数,并不是调用者的变量,而是临时申请的变量a和b存放main函数中变量a和b的值,并在函数中用来计算,在fun中给a和b赋值都是在操作这两个临时申请的变量,函数返回后,这两个变量被舍弃,函数调用也没有将这两个临时变量的值返回给main函数中调用使用的参数功能。所以,在函数中要...

为什么说指针是C语言精华
C语言中的指针,关键意思在于“指”。“指”是什么意思?其实完全可以理解为指示的意思。比如,有一个物体,我们称之为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; 无法直接初始...

C语言中的指针问题到底是怎么回事~
2019-02-26 C语言中关于指针的问题 1 2020-04-16 关于C语言中的指针问题? 1 2019-12-21 C语言中指针问题(真的求,搞不懂,求解答)? 2013-03-20 c语言中,指针问题!*a=b和a=&b,有什么不同?a是指针 54 2019-09-11 c语言指针与数组问题,运算符到底是个什么鬼? 2018-12-08 c语言*的操作数必...

C语言不能代表a[1]地址的是
选C a为数组名,代表的是数组a的首地址,是一个固定不变的量,不能执行"++"操作 A项,p指向a[0],所以p+1指向a[1];B项,同理,a指向a[0],a+1就指向a[1];D项,表达式"++p"的值是p+1之后的值,所以也指向a[1];

c语言中可以使用空指针的地址吗?为什么?例如
在C语言中,空指针是指指向空地址的指针,其值为NULL。空指针的地址是指空指针所指向的内存地址,也就是空地址。在C语言中,可以使用空指针的地址,但通常不会主动使用它。空指针的地址通常由编译器自动分配,用于表示一个不存在的指针或者一个未初始化的指针。使用空指针的地址可能会导致程序错误,...

C语言指针问题(求高人指点啊)
看下一句:*p=*q---是正确的,意思是把q所指向的地址上的值给p指向的地址的指。给你个例句:int a=10,b=20;int *p=&a,*q=&b;p=*q;结果很明显a=20;既*p=20 4 int a=20;*p,*q=&a;p=q;int p,*q;q=&p;最后一点啦!第一行!看似没错!其实---,事实上c语言的定义不能在...

C语言,函数参数是变量,函数内使用指针。
我执行了你的程序,结果是:show1函数执行的时候,number放在地址0012FF2B里,但是执行完后这个地址系统就回收了,不再保存number。到show2函数执行的时候,恰好系统也给number1分配了这个地址0012FF2B,这个时候地址0012FF2B放的是number1.所以这里没有存在冲突的地方。

c语言用指针比较快是不是因为直接访问寻找变量需要的时间比较多 而指针...
只要交给操作系统进行逻辑地址向物理地址的转变就可以了。也就是说,用变量,用指针寻址时间基本上都是一样的,变量在编译的时候也变成指针了 C语言中说用指针比较快应该是相对于其他的语言,比如Java。Java是没有指针这种说法的。但是Java的语言架构比C语言多一层,所以不能说时间是省在寻址上的。

白河县17229177233: C语言 为什么不用指针 -
酆荣甲磺: 什么时候用指针,什么直接用变量要看具体的情况.用指针速度比用变量会有所提高,那是指传递结构体等大型变量时.这时用指向结构体的指针来代替结构体变量可以减少结构体拷贝的过程.比如:struct A { int n; int m; }; int fun1(struct A x) { ...

白河县17229177233: C语言中的结构体中定义的数字为什么不能用指针的方法来输出呢? -
酆荣甲磺: p是NODE **p是NODE 你直接cout <<*p 和cout<<n1是同样的效果 除非对NODE类型做了<<重载,否则就是编译报错了

白河县17229177233: c语言里面为什么不能把指针赋给数组名? -
酆荣甲磺: 有两种情况.. 1、char *p = "123"; char s[4];s = p; 这种情况是不合法的..此时的数组名虽然也是指针,但应该看成指针常量,是不能修改的..2、void fun(char a[]){}void main(){char *p = "123";fun(p);} 数组作为函数参数的时候,是可以把指针变量赋值给它的,这时数组名就可以看作一般的指针变量了..简单的说就是这样..

白河县17229177233: C语言指针问题,为什么不能运行呢. -
酆荣甲磺: 不知道你在程序中的意图,猜测是字符指针传递地址传递到函数并实现在函数体内改变原字符指针的指向,根据这一点,程序只需要改一点: int fun(char *a,char b,char *pa){ ==>int fun(char *a,char b,char **pa){ 因为你在main()中定义的char ...

白河县17229177233: C语言指针程序无法运行 -
酆荣甲磺: #include<stdio.h> void main() { int a[3][4],i,j,*p; p = a[0]; for(i = 0; i < 3; i++) for(j = 0; j < 4; j++) scanf("%d", (p+i*4+j)); for(i=0; i<3; i++) { for(j = 0; j < 4; j++) printf("%4d", (p+i)[j]); printf("\n"); } }p+i [j] 本身就是一个值而不是指针,你对值加* 自然是不对的.

白河县17229177233: C语言高手一般不用指针? -
酆荣甲磺: C语言高手一般不用指针看 没听说过 C语言的精华就在指针倒是实情.C的指针很灵活,也很容易出错 活用指针,不要滥用 当然,有高手不用C,用Java或C# 这两种都是C++的逗升级版地,里面是没有指针这个概念的,因为指针太危险了,就舍弃了.

白河县17229177233: c语言中,为什么不能对字符指针变量指向的字符串再赋值? -
酆荣甲磺: 因为C语言中,凡是以""括住的形式直接出现,而且你又没有为其分配内存空间的字符串都是常量字符串,是不能修改其值的. 这样: char a[6]="hello"; a[2]='c'; 就可以了. 这里你为hello分配了一个长度为6的字符数组空间来存放. 扩...

白河县17229177233: 在c语言中为什么有的函数参数是指针 有的是没有指针得 -
酆荣甲磺: 指针在函数参数中通常用于传递一个结构,一个字符串,或者一个需要修改的变量;因为在32位系统中变量size最大也只能是32位,也就是4个字节,一个long,再大就不能直接传递了.

白河县17229177233: C语言中哪些指针不能做++运算 -
酆荣甲磺: 常量指针不可以做++运算, 比如 int const *p;不能对指针作++运算,这种指针表示,指针的地址不能被改变,可以改变指针地址中的值.因此不能做++运算.

白河县17229177233: c语言,指针为什么不能使用scanf -
酆荣甲磺: 你这个p1,p1前面还是要加&的.这样解释吧,你定义两个指针变量,但并没有指向一个地址.但是scanf("%d%d",p1,p2); 解释为输入两个数(怎么还是连在一起的??!),储存到p1指向的地址和p2指向的地址.所以你要输入指针也许是想要给这两个指针赋值吧.就算要写,总归指针的占位符是%p吧?如果还有疑问,请追问.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网