| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 11092 人关注过本帖
标题:定义一个指针怎么就当数组使了
只看楼主 加入收藏
令狐少侠56
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:320
专家分:175
注 册:2014-4-10
结帖率:58.18%
收藏
已结贴  问题点数:40 回复次数:7 
定义一个指针怎么就当数组使了
我原以为一定要用*(array+i)来引用数据的,没想到能直接当数组使
还有就是为什么为array分配1 个整型变量的空间就行而不需要100个。

PS:好久没来论坛,版主好像有换
程序代码:
#include <stdio.h>
#include <stdlib.h>

int main(    )
{
    int *array,b ;
    int i ;
    array = (int *)malloc( sizeof(int) );
    //    array = (int *)malloc( sizeof(int)*100 );

    
    for( i=0; i<=100; i++  )
        array[i] = i ;

    for( i=0; i<=100; i++ )
        printf("%d\n",array[i]);

}
搜索更多相关主题的帖子: 空间 
2016-06-10 14:20
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:14 
以下是个人学指针后的一个总结,不对的地方请指出但别骂:
一个整型指针变量,它可以指向一个整型整数,也可以指向一个整型数组。
你通过指针计算,确实可以将只开辟一个int大小的空间硬生生的通过指针计算变成整型数组,但是看完后面的假设你还会这样做吗?
假设array里存的地址是100的话,104以后的地址本来是存放了其它的数据,但是你通过指针将里面的内容强行改变(因为你本来就不知道里面存的是什么东东),这个错误很难让人察觉。但是一但出现错误,它的代价相当昂贵。
2016-06-10 18:30
hykj9495
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:796
专家分:1441
注 册:2016-6-6
收藏
得分:14 
笔记
数组名是指针常量
指针和指针变量是俩个东西
int *p;(它是一个int性指针,定义了一个p变量名)
指针要访问实际内容一定要取地址 这时候*p是拥有p变量名所指向的地址的变量的实际内容。

慢慢调试
2016-06-10 19:11
唯光阿九
Rank: 2
等 级:论坛游民
帖 子:21
专家分:59
注 册:2016-6-10
收藏
得分:14 
我是个新手,刚刚学了指针。我说说我学到的东西吧。
指针是一个地址,通过一种类似于链接的情况间接的使用指向的内容。
数组名是一个地址,也就是一个指针吧。你对赋值了数组名的指针进行操作。因为数组占用内存连续,就可以直接用(*p++);但是这样你使用条件没定好的话很容易出现内存泄漏啊之类的问题。。就这样电脑crash了
2016-06-11 02:01
令狐少侠56
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:320
专家分:175
注 册:2014-4-10
收藏
得分:0 
回复 2楼 linlulu001

如果一个整型变量占用空间的地址为 1000
为一个指针分配空间地址为 999 , 加1 后占了地址为1000的空间
你说的是这个意思吧?
那要怎么处理呢?不能不用指针啊
2016-06-13 17:01
令狐少侠56
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:320
专家分:175
注 册:2014-4-10
收藏
得分:0 
回复 4楼 唯光阿九
我这里的指针不是数组名
2016-06-13 17:02
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:0 
首先,指针的大小是固定的,它就是一串数字(地址)。
分配空间并不是为指针分配空间,
像这句,array = (int *)malloc( sizeof(int)*100 );array他实际上存的是一个连续空间大小为sizeof(int)*100的起始地址。
而我之前说的意思是指针他提供给你一个空间的起始地址,如果不知道空间的大小就对其进行赋值,
就像array = (int *)malloc( sizeof(int) )这句,假设array=100,那么100-104之间只能存入一个整型,但是,你通过指针运算,将104以后
的位置也存入了整型。
很多编译系统对指针超出设定内存的范围它是不会报警的,也就是说array那怕超出104之后,它也一样运行。
指针可以超出范围,但它的起始位置不能前移。
2016-06-13 20:35
小林大哥哥
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2019-7-26
收藏
得分:0 
int ve[j]
ve[j]==*(ve+j)
两边取地址:
&ve[j]==ve+j
&ve[0]==ve+0==ve  即 数组名ve等于数组首元素的地址
以上就是数组和指针的变换公式
2019-07-27 16:29
快速回复:定义一个指针怎么就当数组使了
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015594 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved