4

解析“字符指针变量,数组指针变量,二维数组”

 11 months ago
source link: https://blog.51cto.com/u_16261646/7872329
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

1. 字符指针变量

字符指针变量是存放地址的

char ch = 'w';
	char* pc = &ch;
	*pc = 'w';

表达式的两个属性: 【值属性】计算后的值是多少 【类型属性】类型是什么

解析“字符指针变量,数组指针变量,二维数组”_数组

注:hello是常量字符串,不能被修改,是连续存放的,可用printf("%s\n", p);打印字符串。

常量字符串指的是在程序中声明的一个不可更改的字符串变量

int main()
{
	char str1[] = "hello bit";
	char str2[] = "hello bit";
	const char *str3= "hello bit";
	const char* str4 = "hello bit";

	return 0;
}

str1str2以字符串的形式对数组进行初始化

str3str4是指针,指向的是字符串,指向的内容是"hello bit"(常量字符串)常量字符串不能被修改

数组名是首元素的地址, 在str3str4中,

指向的是同一块地址, 相同内容保存一份

解析“字符指针变量,数组指针变量,二维数组”_字符串_02

2.数组指针变量

指针数组是存放指针的数组 字符指针——指向字符的指针,存放的是字符的地址char ch='w';char *pc=&ch. 整形指针——指向整型的指针,存放的是整型的地址int n=120;int*p=&n 数组指针——指向数组的指针,存放的是数组的地址int arr[10];int(*p)[10]=&arr; 数组指针变量——存放数组地址,指向数组的指针变量int(*p)[10]=&arr;

解析“字符指针变量,数组指针变量,二维数组”_指针变量_03

注:p先和*结合,说明p是⼀个指针变量,然后指着指向的是⼀个⼤⼩为10个整型的数组。所以p是⼀个指针,指向⼀个数组,叫数组指针。[]的优先级要高于*号的,所以必须加上()来保证p先和*结合。

int *p1[10];//存放指针的数组
int (*p2)[10];//存放数组的指针
解析“字符指针变量,数组指针变量,二维数组”_字符串_04

3.二维数组

void zhizhen_(int arr[3][5], int a, int b)
{
	int i = 0;
	for (i = 0; i < a; i++)
	{
		int j = 0;
		for (j = 0; j < b; j++)
		{
			printf("%d ", arr[i][j]);
		}
		printf("\n");
	}
}

int main()
{
	int arr[3][5] = { {1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15} };
	zhizhen_(arr, 3, 5);



	return 0;
}

法二:(用数组指针)

void zhizhen_(int(*arr)[5], int a, int b)
{
	int i = 0;
	for (i = 0; i < a; i++)
	{
		int j = 0;
		for (j = 0; j < b; j++)
		{
			//printf("%d ", arr[i][j]);
			//printf("%d ", *(arr+i)[j]);
			printf("%d ", *(*(arr + i)+j));


		}
		printf("\n");
	}
}

int main()
{
	int arr[3][5] = { {1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15} };
	zhizhen_(arr, 3, 5);



	return 0;
}

二维数组的每一行是一个一维数组,这个一维数组可以看成是二维数组的一个元素,所以二维数组可以认为是一维数组的数组;二维数组的数组名表示数组首元素的地址,就是第一行的地址,也就是一维数组的地址

解析“字符指针变量,数组指针变量,二维数组”_数组_05
解析“字符指针变量,数组指针变量,二维数组”_指针变量_06

第⼀⾏的⼀维数组的类型就是 int [5] ,所以第⼀⾏的地址的类型就是数组指针类型 int(*)[5]那就意味着⼆维数组传参本质上是传递了地址,传递的是第一行这个⼀维数组的地址 ⼆维数组传参,形参的部分可以写成数组,也可以写成指针形式。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK