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;
}
str1
和str2
以字符串的形式对数组进行初始化
str3
和str4
是指针,指向的是字符串,指向的内容是"hello bit"
(常量字符串)常量字符串不能被修改
数组名是首元素的地址,
在str3和
str4中,
指向的是同一块地址, 相同内容保存一份
2.数组指针变量
指针数组是存放指针的数组
字符指针——指向字符的指针,存放的是字符的地址char ch='w';char *pc=&ch.
整形指针——指向整型的指针,存放的是整型的地址int n=120;int*p=&n
数组指针——指向数组的指针,存放的是数组的地址int arr[10];int(*p)[10]=&arr;
数组指针变量——存放数组地址,指向数组的指针变量int(*p)[10]=&arr;
注:p先和*结合,说明p是⼀个指针变量,然后指着指向的是⼀个⼤⼩为10个整型的数组。所以p是⼀个指针,指向⼀个数组,叫数组指针。[]
的优先级要高于*
号的,所以必须加上()
来保证p先和*
结合。
int *p1[10];//存放指针的数组
int (*p2)[10];//存放数组的指针
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;
}
二维数组的每一行是一个一维数组,这个一维数组可以看成是二维数组的一个元素,所以二维数组可以认为是一维数组的数组;二维数组的数组名表示数组首元素的地址,就是第一行的地址,也就是一维数组的地址
标签:10,arr,变量,int,地址,数组,指针 From: https://blog.51cto.com/u_16261646/7872329第⼀⾏的⼀维数组的类型就是
int [5]
,所以第⼀⾏的地址的类型就是数组指针类型int(*)[5]
那就意味着⼆维数组传参本质上是传递了地址,传递的是第一行这个⼀维数组的地址 ⼆维数组传参,形参的部分可以写成数组,也可以写成指针形式。