学点 C 语言(21): 数据类型 - 数组与指针
2008-11-27 22:10
253 查看
1. 获取数组的地址无须 &, 因为数组名本身就是个地址
2. 数组元素的地址是连续的:
3. 数组名所代表的地址就是第一个元素的地址:
4. 通过指针访问数组元素:
5. 通过指针遍历数组:
6. 注意: 指针+1 是根据元素大小移动一个位置
7. 上面的指针其实都是数组元素的指针, 如何声明真正的数组指针呢?
#include <stdio.h> int main(void) { char c = 'A'; char cs[] = "ABC"; printf("%c, %s\n", c, cs); /* 获取字符及字符数组的内容 */ printf("%p, %p, %p\n", &c, cs, &cs); /* 获取字符及字符数组的地址, cs 与 &cs 没有区别*/ getchar(); return 0; }
2. 数组元素的地址是连续的:
#include <stdio.h> int main(void) { char cs[] = "ABC"; printf("%p\n%p\n%p\n%p\n", cs, &cs[0], &cs[1], &cs[2]); getchar(); return 0; }
3. 数组名所代表的地址就是第一个元素的地址:
#include <stdio.h> int main(void) { char str[] = "ABC"; char *p1 = str; char *p2 = &str[0]; printf("%p, %p\n", p1, p2); getchar(); return 0; }
4. 通过指针访问数组元素:
#include <stdio.h> int main(void) { char str[] = "ABC"; char *p = str; printf("%c\n", *p); printf("%c\n", *p+1); printf("%c\n", *p+2); printf("\n"); printf("%c\n", *p); printf("%c\n", *++p); printf("%c\n", *++p); getchar(); return 0; }
5. 通过指针遍历数组:
#include <stdio.h> int main(void) { char str[] = "123456789"; char *p = str; int i; for (i = 0; i < sizeof str/sizeof str[0]; i++) { printf("%c\n", *p); p++; } getchar(); return 0; }
#include <stdio.h> int main(void) { char str[] = "123456789"; char *p = str; while (*p != '\0') { printf("%c\n", *p); p++; } getchar(); return 0; }
#include <stdio.h> #include <string.h> int main(void) { char str[] = "123456789"; char *p = str; int i; for (i = 0; i < strlen(str); i++) { printf("%c\n", *(p+i)); } getchar(); return 0; }
#include <stdio.h> int main(void) { int nums[] = {111,222,333,444}; int *p = nums; int i; for (i = 0; i < sizeof nums / sizeof nums[0]; i++) { printf("%d\n", *p++); } getchar(); return 0; }
6. 注意: 指针+1 是根据元素大小移动一个位置
#include <stdio.h> int main(void) { int nums[] = {111,222,333,444}; int *p = nums; int i; printf("%d\n", *p); printf("%d\n", *(p+1)); printf("%d\n", *p+1); /* 不是这样; 这是代表取值后再 + 1 */ getchar(); return 0; }
7. 上面的指针其实都是数组元素的指针, 如何声明真正的数组指针呢?
#include <stdio.h> int main(void) { int nums[4] = {111,222,333,444}; int (*p)[4] = &nums; /* 注意其中的小括号 */ printf("%d\n", (*p)[1]); /* 用起来并不方便 */ printf("%d\n", (*p)[2]); getchar(); return 0; }
相关文章推荐
- 学点 C 语言(25): 数据类型 - 结构数组与结构指针
- 学点 C 语言(22): 数据类型 - 多维数组与指针
- C 语言中的数组类型和数组指针类型.
- 01_Java语言基础部分(数据类型与表达式、流程控制语句、数组与方法)
- 编写程序读入一组string类型的数据,并将它们存储在vector中,再将vector对象复制给一个字符指针数组。
- 【语言基础】c++ 基本数据类型与字节数组(string,char [] )之间的转化方法
- C语言数据类型之指针(持续补充)
- 数据类型 - 多维数组与指针
- C提高——数组、数组数据类型、数组数据类型指针、多维数组本质等
- 关于数据类型与指针的小笔记--初始化问题&&数组
- 黑马程序员————C语言基本语法(数组、字符串、指针、其他数据类型)
- C语言基础整理2(运算符、数据类型、控制语句、循环语句、数组)
- go语言笔记——切片底层本质是共享数组内存!!!绝对不要用指针指向 slice切片本身已经是一个引用类型就是指针
- 学点 C 语言(19): 数据类型 - 数组
- C语言学习6 :指针的定义,指针类型要合法,指针要初始化,指针做函数参数,数组和指针的通用性,指针+1所代表的空间,void * 指针,交换函数中的指针,数组和字符型指针区别,字符型指针的应用,使用指针完成字符操作函数
- 黑马程序员_01_Java语言基础部分(数据类型与表达式、流程控制语句、数组与方法)
- 数据类型 - 数组与指针 (转自万一老师)
- C语言基础--指针数据类型
- C语言基础(一)之数据类型及指针
- C语言基础:指针类型与指针和数组、字符串的关系