手机版 欢迎访问it开发者社区(www.mfbz.cn)网站

当前位置: > 开发

数组指针

时间:2021/5/27 2:47:18|来源:|点击: 次

1、数组指针

        ● 数组是一系列具有相同类型的数据的集合,数组中的所有元素都是连续排列的;

           整个数组都是占用的一块儿内存;

           数组名可以认为是一个指针,它指向数组中的第 0 个元素;

           C 语言中我们将第 0 个元素的地址称为数组的首地址,注意数组名和数组首地址并不总是等价的;

2、以指针的方式遍历数组

        ● sizeof(arr):取得数组总字节数长度;

           sizeof(int):取得 int 类型数据占用的字节数,数组总字节数长度 / 每个元素占用字节数 = 数组长度;

        ● 由于数组名可以看作是数组首地址,所以 arr+i,就是每个元素的指针,用 * 取值,得到每个元素的值;

#include <stdio.h>

using namespace std;

int main() {
	int arr[] = {95,26,32,15,108,67};
	for (int i = 0; i < sizeof(arr) / sizeof(int); i++) {
		printf("%d\n", *(arr + i));
	}
	return 0;
}
#include <stdio.h>

using namespace std;

int main() {
	int arr[] = {95,26,32,15,108,67};
	int *p_arr = arr;
	for (int i = 0; i < sizeof(arr) / sizeof(int); i++) {
		printf("%d\n", *p_arr++);
	}
	return 0;
}

3、字符数组和字符串常量

        ● C 语言还支持另一种方式表示字符串;

           字符串的所有字符在内存中都是连续排列的;

           str 指向字符串的第 0 个字符,称为首地址;

           字符串中每个字符的类型都是 char,所以 str 的类型也必须是 char*;

#include <stdio.h>
#include <string.h>

using namespace std;

int main() {
    //这种声明方法 str 是放在常量区的
	const char *str = "Hello World!";
	printf("%#x\n", str);
    
    //由于 str 存储在常量区,我们无法对其中单个元素进行重新赋值
    str[1] = 'p';

    //整个重新赋值之后,str 变成了变量,地址改变了
	str = "I love C!";  //正确
	printf("%#x\n", str);
	return 0;

	//输出结果:
	//0x747cd0
	//0x747bd4
}
#include <stdio.h>
#include <string.h>

using namespace std;

int main() {
    //C语言不需要写const,C++必须写
    //因为这种写法的字符串时存储在常量区的
	const char *str = "www.csdn.net";
	const char *p_str = str;

	//直接输出
	printf("%s\n", str);

	//*(str+i)
	for (int i = 0; i < strlen(str); i++) {
		printf("%c", *(str+i));
	}
	printf("\n");

	//*p_str++
	for (int i = 0; i < strlen(str); i++) {
		printf("%c", *p_str++);
	}
	return 0;
}
#include <stdio.h>
#include <string.h>

using namespace std;

int main() {
	char str[] = "www.csdn.net";
	char *p_str = str;

	//直接输出
	printf("%s\n", str);

	//*p_str++ 方式
	for (int i = 0; i < sizeof(str); i++) {
		printf("%c", *p_str++);
	}
	printf("\n");

	//*(str+i) 方式
	for (int i = 0; i < sizeof(str); i++) {
		printf("%c", *(str + i));
	}
	printf("\n");

	//str[i] 方式
	for (int i = 0; i < sizeof(str); i++) {
		printf("%c", str[i]);
	}
	printf("\n");

	return 0;
}

 

Copyright © 2002-2019 某某自媒体运营 版权所有