目录
数组地址
整形数组传参
1.指针接收
2.数组接收
字符数组传参
1.指针接收
字符数组
字符串数组
2.数组接收
字符数组
字符串数组
传递数组长度
1.字符串数组
数组接收
指针接收
2.字符数组
数组接收
指针接收
3.整形数组
数组接收
指针接收
4.问题原因
总结:
数组经常被用来做函数的参数,但它的传参和接收一直是难以让人明白,以下是我的一些总结,希望对你有所帮助
数组中各元素在内存中连续存放
存在两个意外:
1.sizeof(数组名):数组名表示整个数组,计算整个数组的大小,单位是字节的
2.&数组名,数组名表示整个数组,取出的是整个数组的地址
除此之外,遇到的所有数组名都是首元素地址
int main()
{
int arr[10] = { 1,2,3,4,5,6,7 };
int* p = &arr[0];//将数组第一个元素地址赋给指针p
int i = 0;
//打印p和数组的地址
for (i = 0; i < 10; i++)
{
printf("%p = %p\n", p + i, & arr[i]);
}
return 0;
}
此时for循环内地址的变化为
void text(int* arr)
{
printf("%d\n", *(arr + 1));
printf("%d\n", arr[2]);
}
int main()
{
int arr[] = { 1,2,3,4,5 };
text(arr);
return 0;
}
void text(int arr[])
{
printf("%d\n", *(arr + 1));
printf("%d\n", arr[2]);
}
int main()
{
int arr[] = { 1,2,3,4,5 };
text(arr);
return 0;
}
void text(char* arr)
{
printf("%c\n", *(arr + 1));
printf("%c", arr[2]);
}
int main()
{
char arr[] = { 'a','b','c'};
text(arr);
return 0;
}
void text(char* arr)
{
printf("%c\n", *(arr + 1));
printf("%c", arr[2]);
}
int main()
{
char arr[] = "abcd";
text(arr);
return 0;
}
void text(char arr[])
{
printf("%c\n", *(arr + 1));
printf("%c", arr[2]);
}
int main()
{
char arr[] = { 'a','b','c'};
text(arr);
return 0;
}
void text(char arr[])
{
printf("%c\n", *(arr + 1));
printf("%c", arr[2]);
}
int main()
{
char arr[] = "abcd";
text(arr);
return 0;
}
void text(char arr[])
{
printf("%d", strlen(arr));//strlen函数用来求字符串长度
}
int main()
{
char arr[] = "abcdef";
text(arr);
return 0;
}
void text(char* arr)
{
printf("%d", strlen(arr));//strlen函数用来求字符串长度
}
}
int main()
{
char arr[] = "abcdef";
text(arr);
return 0;
}
void text(char arr[])
{
printf("传值函数内求数组长度:%d\n", sizeof(arr)/sizeof(arr[0]));
}
int main()
{
char arr[] = { 'a','b','c' ,'d','e','f'};
printf("主函数内求数组长度:%d\n", sizeof(arr) / sizeof(arr[0]));
text(arr);
return 0;
}
void text(char* arr)
{
printf("传值函数内求数组长度:%d\n", sizeof(arr)/sizeof(arr[0]));
}
int main()
{
char arr[] = { 'a','b','c' ,'d','e','f'};
printf("主函数内求数组长度:%d\n", sizeof(arr) / sizeof(arr[0]));
text(arr);
return 0;
}
void text(int arr[])
{
printf("传值函数内求数组长度:%d\n", sizeof(arr)/sizeof(arr[0]));
}
int main()
{
int arr[] = { 1,2,3,4,5 };
printf("主函数内求数组长度:%d\n", sizeof(arr) / sizeof(arr[0]));
text(arr);
return 0;
}
void text(int* arr)
{
printf("传值函数内求数组长度:%d\n", sizeof(arr)/sizeof(arr[0]));
}
int main()
{
int arr[] = { 1,2,3,4,5 };
printf("主函数内求数组长度:%d\n", sizeof(arr) / sizeof(arr[0]));
text(arr);
return 0;
}
查阅一些资料和其它博客,发现数组无法在其它函数确定长度的主要原因为
引用:我们都在for循环,区别在于你是什么情况下break的。