C 指针初步认识(二)

数组指针

一个变量有一个地址,一个数组包含若干元素,每个数组元素都在内存中占用存储单元,它们都有相应的地址。
所谓数组的指针是指数组的起始地址,数组元素的指针是数组元素的地址。

定义一个指向数组元素的指针变量

int a[10];  //定义a为包含10个整型数据的数组
int *p;  //定义p为指向整型变量的指针
p=&a[0] //应当注意,因为数组为int型,所以指针变量也应为指向int型的指针变量。

把a[0]元素的地址赋给指针变量p。也就是说,p指向a数组的第0个元素。

1.png

C语言规定,数组名代表数组的首地址,也就是第0号元素的地址。

int a[10];
int *p;
// 第一种方式
p=&a[0];
p=a;

// 第二种方式
int *p=&a[0];

//这两种方式是等价的

指针引用数组如果指针变量p已指向数组中的一个元素,
p+1指向同一数组中的下一个元素。
p-1指向同一数组中的前一个元素。

p = &a[0] // 指针p 指向数组首地址

//p+i  就是 a[i] 的地址,或者说它们指向a数组的第 i 个元素。
[/i]p+5 // 现在p往后移动5个元素,现在指向 a[5]的地址

// *(p+i)  就是 p+i  所指向的数组 a元素(的内容)
*(p+5) // 就是a[5]的内容

输出数组

//使用下标方法
#include <stdio.h>
int main(){
    int a[10], i;
    // 赋值
    for(i=0; i<10; i++)
        a=i;
    //打印     
    for(i=0;i<10;i++)
        printf("a[%d]=%d\n", i, a);
    return 0;
}
//使用计算元素的地址方法
#include <stdio.h>
int main(){
    int a[10], i;
    //赋值
    for(i=0; i<10; i++)
        *(a+i) = i;
        
    //打印
    for(i=0; i<10; i++)
        printf("a[%d]=%d\n", i, *(a+i));
    return 0;
}
//指针变量指向元素方法
#include <stdio.h>
int main(){
    int a[10], i, *p;
    p = a;
    //赋值
    for(i=0; i<10; i++)
        *(p+i) = i;
        
    //打印
    for(i=0; i<10; i++)
        printf("a[%d]=%d\n", i, *(p+i));
    return 0;
}

例子
判别一个整数数组中各元素的值,若大于0 则输出该值,若小于等于0则输出0值。

#include <stdio.h>

void nzp(int *a){
    int i;
    for(i=0; i<5; i++){
        if(a[i]<0) a[i]=0;  //小于0的元素,赋值为0
    }
}

int main(){
    int b[5], i;
    printf("Input 5 numbers:\n");
    for(i=0; i<5; i++)
        scanf("%d", &b[i]);
    printf("Initial values of array b are: ");
    for(i=0; i<5; i++)
        printf("%d ", b[i]);
    nzp(b);
    printf("\nFinal values of array b are: ");
    for(i=0; i<5; i++)
        printf("%d ",b[i]);

    return 0;
}

运行结果:

Input 5 numbers:
1↙
3↙
-90↙
-23↙
100↙
Initial values of array b are: 1 3 -90 -23 100
Final values of array b are: 1 3 0 0 100

说明:

  1. 形参数组 和 实参数组类型必须一致
  2. 形参数组和实参数组的长度可以不同, 一般定义方法原型的参数,可以允许不给出数组长度。如写成 void nzp(int a[]), 当然也可以 void nzp(int *a)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,219评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,363评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,933评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,020评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,400评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,640评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,896评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,597评论 0 199
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,327评论 1 244
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,581评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,072评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,399评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,054评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,083评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,849评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,672评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,585评论 2 270

推荐阅读更多精彩内容

  • 指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; ...
    朱森阅读 3,387评论 3 44
  • 指针 指针是什么 为了了解指针的概念,我们先来看一个小故事。话说福尔摩斯派华生到威尔爵士居住的城堡去取回一个重要的...
    去留无意hmy阅读 501评论 0 1
  • C语言指针的总结 1. 变量 不同类型的变量在内存中占据不同的字节空间。 内存中存储数据的最小基本单位是字节,每一...
    xx_cc阅读 3,560评论 11 39
  • 那日,晨光熹微 相处的默契,逃不过分离 没有再見,没有道別 没有联系方式 甚至,忘了你的名字 唯在戚戚的风里,就着...
    南山公子阅读 227评论 4 8
  • 历年来,天痕家族的后辈在圣灵学院能进天才班的,也就寥寥几十人而已。虽然进不了天才班,并不代表没有培养的价值了,但进...
    im喵小姐阅读 393评论 0 0