c语言中怎么定义一个指针,C语言中,定义一个指针的时候为这个指针开辟...

568553e44a8cfcff4314417ec2faa746.png

2016-08-03 10:00齐景宪 客户经理

区别:C语言把内存划分成四个区,它把一般的变量和数组等存在于内存中的栈区,所以数组在C语言的定义中只是一组同类型的普通变量,即使这个变量有可能是指针。所以他的作用比指针小的很多,而指针可以指向任何区的任何数据,所以就会觉得指针和数组名很像,但是必须要注意的是,数组名只是指针中的一种,它是指针中只指向栈区的且指针的移动范围是有限的,即数组长度。而且数组在定义之初就已经有了自己的内存,一般的指针如果未指向某一个内存块时,它是没有自己的内存的,即所谓的野指针。

联系:如上面所说,数组只是定义在栈区的一个连续变量,它的首地址就酣抚丰幌莶呵奉童斧阔是一个指针。

总结:不仅数组有指针,所有变量都有指针,指针说白了就是内存中的地址,就像一个房间必须有一个房间号。在C/C++语言中定义一个指针,就是在栈区开辟一个内存空间用来存放它指向的内存地址,然后给指针赋值,就是把地址值赋值给刚才开辟的内存空间,然后通过访问该内存中的地址值来间接访问该地址下存放的数据。如果该地址值指向的是一块静态存储区,如字符串常量等,当然就不可以修改指向的内容啦。

经验之谈,楼楼加分啊

6073d141230090345e14a3d971014746.png

2016-08-03 09:57赵骏凯 客户经理

楼主,其实,C语言里面只有变量和常量,根本没有什么指针,指针也是变量。变量是一个“名化”(就是有名字)的存储空间。一个变量具有二重属性,一是值,二是地址(物理地址,就是内存中的位置)。变量名与值绑定在一起,通过变量名我们可以访问存放在它所代表的这个存储空间里的值,可以把新的值放进它所代表的这个存储空间(同时原来的值被覆盖掉)。而变量的另外一个属性,地址,则是隐性的。C语言里面我们需要在变量名前面使用取地址运算符&来获取。比如说:

int a, b;声明了一个变氦筏份禾莓鼓逢态抚卡量,我们可以写a = 3(把3放进a所代表的存储空间里面),我们可以写b = a + 2;我们把a里面的值取出来加2后得到的值5放进b所代表的存储空间里面。如果我们想知道a所代表的存储空间到底在内存中的什么位置,那我们可以写 &a,这个时候&a就把a所代表的内存空间的位置,就是变量a的地址取出来了。由于内存里面每一个单元的地址是用正整数来标记的(就像座位编码1,2,3...号一样),所以地址也可以被当作值(正整数不就是值吗?)来看待,不妨假设&a=1024,既然地址是值,那我们就可以把它存到另外一个存储空间里面,我们写int * p = &a;正是此意。

楼主,你不妨记住我在这儿给你说的每一句话,尤其是开头的那两句,现在不明白不要紧,时候到了你自然会明白,到那时候你就知道此乃金玉良言!

d4a8c828cb85026f06ed44172681a0d9.png

2016-08-03 09:54黄盛权 客户经理

这个简单,首先你要明白,每一块内存都是有一个对应的地址编码的。你需要这么理解。

在内存里面除了存数据外,还会存内存的地址。比如 我们定义:int a=1;那么要开辟两个内存块:一个是存当整数1的,还有一个就是存放这个1的地址的。而指针就是地址。“*”其实有两种含义,一个定义的时候用,比如

int *p,这个的意思是标识这个P是一个指针。*p++里面的*是表示取p这个变量里保存的地址里面的数据。&是表示取变量的地址。不要把指针想的多难,你只要简单地知道内存是有地址编号的,而内存既能数据,也能存地址。

4e5832c1959fb78b591f0c21f6e8f6a6.png

2016-08-03 09:48赵首永 客户经理

有时候需要将不同类型的数据组合成一个有机的整体,这些组合在一个整体中的数据是互相联系的,就用到结构体。

每个成员名前的类型标识符可以为已经定义了的任意类型,当然可以是结构体类型标识符,即结构体成员也可以是另一个结构体变量。

struct date

{

int year;

int month;

int day;

};

struct student

{ int num;

char name[20];

char sex;

struct date birthday;

char addr[30];

};

此处只是构造出一个新的类型,并没有定义该类型的变量,因此在内存中并没有开辟任何存储空间;

成员也可以是指向本结构体类型的指针变量;

struct student

{ int num;

char name[20];

float score;

struct student *next;

};

b9500b7220f3dfb8c83a5337d37f3ab7.png

2016-08-03 09:45连伟杰 客户经理

在C语言中,任何一个变量总结起来包括变量的数据类型、存储空间。在数据类型中定义的变量的基本范围和操作类型。存储空间就是变量在计算机中的存储地址,如何有效的存储变量并能有效的访问到它这是一个必须解决的问题。指针籂矗焚匪莳睹锋色福姬就是表示地址的一种变量,所以指针的范围严格来说只能是自然数的,并且不能在两个指针间进行加、乘、除这样的运算。

9980a19d0168120fbeff2955b517d382.png

2016-08-03 09:42路誉盛 客户经理

如果将指针变量指向一个已开辟过的,即已有的空间,就不需要重新开辟内存空间了,只有需要开辟的害怠愤干莅妨缝施俯渐时候才开辟内存空间

9e4b7277d9c2c6dd3898f1f9fbe2eacd.png

2016-08-03 09:39齐晓彤 客户经理

2.

char s2[]="string";中,s2是个指针常量,故不能再赋值,即C:s2="w"; 是错误的,*s2指向数组的第零个元素,是个字符,故D: *s2="w"; 是错误的,应该是*s2='w'; ,对char *s1="string"; ,s1是个指针变量,故可以重新赋值,故B: s1="w"; 是正确的,

1.

const出现在*号左边则该指针指向的位置的内容不可改变;const出现在*号右边则该指针指向的位置不可改变;对char *const s1="string"; ,s1不能重新赋值,故A: s1="w"; 是错误的,对char const *s2="string"; ,s2可以重新赋值,故C: s2="w"; 是正确的,

对1,2两题中剩余的选项,都犯了一个共同的错误,就是在定义一个指针变量(或指针常量)p时,系统仅仅为指针自己分配了存储空间,并没有像数组那样专门开辟了一个空间存放数据元素,故p只能指向一个常量的存储空间,即他所指向的数据是常量,其值不可改变;如果人工专门开辟一个空间,然后让p指向这个空间,这样存在于这个空间的数据才是可以修改的,如char p=(char)malloc(sizeof(char)),这时,*p=‘w'是正确的。

故答案是:1、C 2、B

你所说的答案是错误的,可以上机验证一下。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值