问题1:一个指针是4个字节(教程中说是32根地址线),那我如果我的操作系统是64位的呢。那么一个指针有多少个字节?
问题2:地址线和操作系统的位数有关系吗
问题3:
len = 5 ;
int * pArr = (int *)malloc(sizeof(int) * len);
上面代码中,一个指针指向了4个字节,如果sizeof(。。。),
。。。为double类型时,一个指针指向了8个字节。
。。。为结构体类型时(不知道可不可以,假设可以的话),那一个指针指向了N个字节。
那么一个指针最多可以指向多少个字节?
1ã2ç64次æ¹ä¸º17179869184Gï¼8TBæ¯æä¹ç®ç
2ãå¨64ä½æºä¸è£
个32ä½çwindows为ä»ä¹ä¼æ
¢ï¼æä¹ç¡®å®ä¹è¯è¿ï¼æ
¢çè¦æ»ã
8tbä¹ä¸æ¯é£ç®çï¼ã64ä½çå°å线å®é
ä¸è¿64æ ¹é½ä¸å°ï¼åªå®ç°äº40~50æ ¹ï¼å 为足å¤ç¨äºï¼Windows x64çæ¬éå¶äº44ä½å¯»åï¼æ大16TBå
åï¼æ以é æäºæè°çAMD64空æ´ï¼ç¨æ·ç©ºé´å¨ä½ä½ï¼å
æ ¸ç©ºé´å¨é«ä½ï¼è44ä½å¯»åä¸å®å
¨ï¼ä¸é´å¿
ç¶æ空æ´ï¼ã
ä¹å°±æ¯è¯´ãçæ£ç64ä½ãä¹æå®ç°
2ãé£æ ·åæ¥ä¸åºå®çæ§è½ï¼æçæ¯å¤æ人ãä¸ä»£i7 2.8ã16gç©çå
åï¼è£
äº32ä½ç³»ç»åãç©çå
ååªæ4gï¼æ ¹æ¬å°±åæ¥ä¸åºæ§è½â¦â¦ã
我感觉楼上的回答有点问题
如果地址总线是64位,操作系统是32位,那一个指针依然是4字节(或者更少)。如果操作系统是64位的,那也不一定是8字节。原因是决定一个变量的字节长度的不是CPU也不是操作系统,而是你的编译器。例:如果在32位机上用TC来sizeof一个指针你会发现是2字节的,通过这个可以发现字节长度和CPU寻址没有直接联系,和这个密切相关的是你的编译器。而32位操作系统上你不可能装一个64位的编译器,所以长度最多还是4,即使是64位的操作系统,一般你用VC6.0的话,编译器还是32位的,也就是长度还是4,这个具体你可以试一下,我也只是说一下理论,具体我也没实践过。
64位的CPU可以支持64位操作系统并兼容32位16位的,32位CPU可以支持32位操作系统兼容16位的,不过64位操作系统最多也只能支持16G内存,楼上说的8TB是指硬盘吗?
当然可以为结构体,指针指向的内存的(首地址),而整个数据的长度大小取决于指针的变量类型,不管什么数据类型首地址都是一个字节。如int *p是一个首地址加1字节的长度,long* p是首地址加2个字节长度,etc
32系统指针32位,64系统指针就是64位
有,一般操作系统位数据是指cpu一次处理数据长度。而这个长度一般与地址线根相同
你没搞清楚指针的意思。指针里保存的只是地址值,至于它指向多少字节数据,那是程序员自己事的,除了内存不足,应该没上限样
c语言指针的赋值问题
在C语言中,指针是一个变量,其特殊之处在于它存储的是其他变量的地址,而不是值本身。指针使我们能够间接地访问和修改变量的值。指针的赋值过程 当我们为指针变量赋值时,实际上是将其指向一个变量的内存地址赋给它。这个过程分为两步:首先确定变量的地址,然后将这个地址赋给指针变量。例如,如果我们...
关于c语言指针的一些问题。
1、不是说系统64位它就是8字节,而是受限于地址总线的字节宽度,你的地址总线是64位的即指针就是8字节的,但是现在的64位个人pc多半是x86-64能兼容32位的应用程序。2、有,你64 位的机器,它的虚拟内存可以到8TB,如果你在64位机上装个32位的windows你会发现,我的个去……慢的要死(我犯过...
c语言这几道题 关于指针的 望大神解答
1、D选项,*x本身就错误,因为x是int类型,没法使用*操作符。2、A之所以错是因为代码中有一句q=NULL,也就是说q是一个空指针了,你再向里面写东西就错了,而且你在vc6.0中可以试一下,马上会出现一条0xc000 0005的写异常。。3、是的,你不管给它赋值多少都是4的。。就好比一个4平方米的房子...
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语言对C指针的疑惑
1、C的变量都有四个基本属性:名称、类型、地址、内容,类型决定变量在内存占据的空间的大小和内容的存储形式。指针是一种以内存地址作为内容的变量,若定义了一个指针变量,它和其他变量一样具有自己的名称,存储地址和记录的内容,指针数据类型的变量与其他数据类型的变量在存储上的区别就是不论是什么...
C语言中的指针问题到底是怎么回事~
指针的类型(即指针本身的类型)和指针所指向的类型是两个概念。当你对C越来越熟悉时,你会发现,把与指针搅和在一起的“类型”这个概念分成“指针的类型”和“指针所指向的类型”两个概念,是精通指针的关键点之一。我看了不少书,发现有些写得差的书中,就把指针的这两个概念搅在一起了,所以看起书来前后矛盾,...
C语言指针问题
变量之间互相赋值是正确的。“原因是被赋值的指针变量前不能再加*说明符”这句话的意思是:如果 给 指针P加上“*”,那么它就变成 了变量,代表的意义就变了,而地址只能赋值给指针不能给变量。最后建议学习看书一定要读国外原著,国内翻译或作者的理解或描述,未必就是正确和合适的。
c语言问题,关于指针的问题
一、比如我们定义一个int型指针变量。int *p=NULL;初值为空。那么当执行while(p);时,只有p==NULL时,while循环才会结束。所以如果我们写while(p);printf。。。;那么只有当p为空时,后面的printf才会执行。否则就一直循环,这样我们就能判断p为空了。同理!p,自然就能判断p不为空了。二、p...
c语言程序指针问题
1、指针赋值带来的内存丢失在C语言中指针之间是可以相互赋值的,但是使用不当可能会造成部分内存的“丢失” ,即这部分内存空间不能再被该任何程序访问。如: main(){float *a, *b;a=(float)malloc( sizeof( float));b=(float)malloc( ...
c语言指针问题
(2),对于*P1=*P2 操作之前,一定要先将P1和p2先指向变量。还有*p=3之前,也要先把p指向一个变量。指针就是一个指向地址的变量,使用之前需要先给它赋值,也就是先将将一个变量的地址赋值给它,这个时候指针里面存的就是这个变量的地址。理解了指针的概念,上面这些问题就好理解了~...