#define _CRT_SECURE_NO_WARNINGS 1 #includeint main() { char arr1[] = "hello"; char arr2[] = "hello"; char * p1 = "hello"; char * p2 = "hello"; if (arr1 == arr2) printf("arr1和arr2相同n"); else printf("arr1和arr2不相同n"); if (p1 == p2) printf("p1和p2相同n"); else printf("p1和p2不相同n"); printf("n"); printf(arr1); printf("n"); printf(arr2); printf("n"); printf("n"); printf("%p", & arr1); printf("n"); printf("%p", & arr2); printf("n"); printf("n"); printf("%p", p1); printf("n"); printf("%p", p2); printf("n"); return 0; }
注意:这里if判断语句比较的是数组的位置不是数组里面的元素是否相等
如果我们要比较两个 数组 是否相等,我们不可以直接使用等于进行比较,且没有系统方法可以进行直接比较。. 要比较两个 C 语言的数组是否相等,我们只有使用 for 循环 或者 while 循环 去遍历数组,然后进行挨个比较。.
这里对于指针来说,指向的东西相同就没有必要开辟两个空间,而且指针是不能像数组一样修改里面的元素的,可以把这个理解为常数
指针数组
数组 - 数组中存放的是指针(地址)
变量类型 * 数组名[数组长度] ; //存放整形指针的数组
指针数组的使用
#define _CRT_SECURE_NO_WARNINGS 1 #includeint main() { int arr1[] = { 12,2,3,4,5 }; int arr2[] = { 2,12,23,54,15 }; int arr3[] = { 124,26,30,46,55 }; int* p[] = { &arr1,&arr2,&arr3 }; for (int i = 0; i < sizeof(p)/sizeof(p[0]); i++) { for (int j = 0; j < 5; j++) { printf("%d", *(p[i] + j)); } printf("n"); } return 0; }
数组指针
是一种指针 - 指向数组的指针
整型指针 - 指向整形的指针
字符指针 - 指向字符的数组
定义方法
类型名(*指针名)【数组长度】 = &数组名字
#define _CRT_SECURE_NO_WARNINGS 1 #includeint main() { int arr[] = { 1,2,3,4,5,6,7,8,9 }; int(*p)[10] = &arr; //这里的&arr取出的是数组的地址 //parr 就是一个数组指针 - 其中存放的是数组的地址 printf("%d", (*p)[0]); printf("%d", (*p)[1]); printf("%d", (*p)[2]); printf("%d", (*p)[5]); printf("%d", (*p)[6]); return 0; }
数组名是数组首元素的地址
但是有两个列外
1.sizeof(数组名) - 数组名表示整个数组,计算的是整个数组的大小,单位是字节
2.&数组名 - 数组名表示整个数组,取出的是整个数组的地址
数组指针的使用
#define _CRT_SECURE_NO_WARNINGS 1 #includevoid printf1(int arr[3][5],int x,int y) { int i = 0; int j = 0; for ( i = 0; i < x; i++) { for ( j = 0; j < y; j++) { printf("%d", arr[i][j]); } printf("n"); } } void printf2(int (*p)[5],int x,int y) { int i = 0; int j = 0; for (i = 0; i < x; i++) { for (j = 0; j < y; j++) { printf("%d", *(*(p+i)+j)); //这里大体可以理解为p+i解开的是行,+j解开的是列 } printf("n"); } } int main() { int arr[3][5] = { {1,2,3,4,5},{7,8,9,4,5},{3,7,5,6,4} }; printf("输出二维数组的所有元素n"); printf1(arr,3,5); printf("--------------------------------------------------------n"); printf2(arr, 3, 5); return 0; }
int arr[5];
定义的一个数组长度为五的整形数组
int *parr1[10];
定义了一个存放10个整形指针的数组
int (*parr2)[10];
代表的是指向数组长度为10的指针
int (*parr3[10])[5];
parr3是一个存储数组指针的数组
该数组能够存放10个数组指针
每个数组指针能够指向一个数组,数组5个元素,没个元素都是int类型
一级指针传参
#includevoid print(int* p,int sz){ for (int i = 0; i < sz; i++) { printf("%dn",*(p+i)); } } int main(){ int arr[] = {1,2,3,4,5,6,7}; int *p = arr; int sz = sizeof(arr)/sizeof(arr[0]); print(p,sz); return 0; }
一级指针传参,函数接受的指针类型也就是地址类型
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)