一月二日记录
数组与指针
- 字符串与指针
访问字符串有两种方式,一种是使用字符数组来存放一个字符串;另一种是使用字符指针指向一个字符串,此时可以不定义数组。
简单使用:
char *str = "hello world!";
printf("%s",str);
char *str = { ' ' };
scanf("%s", str);
printf("%s", str);
- 字符串数组
字符串数组有别于字符数组,字符数组是一个一维数组,而字符串数组是以字符串为数组元素的数组,可将其视为二维数组。
定义一个简单的字符串数组:
char country[5][20]=
{
"China",
"Japan",
"Russia",
"Germany",
"Switzerland"
}
在定义字符串数组时,我们经常会发现定义使用的内存空间远远大于实际使用的内存空间,这样会造成资源浪费。为了节约资源,我们可以使用指针数组。
- 指针数组
指针数组,顾名思义,就是数组元素都是指针。
一个简单的应用:
#includeint main() { int i; char *country[]= { "China", "Japan", "Russia", "Germany", "Switzerland" }; for(i = 0; i < 5; i++) { printf("%sn",month[i]); }
指向指针的指针
其实就是第二个指针的内容是第一个指针的地址。
指针变量作函数参数
有些类似于将数组名作为函数参数。
如:
自定函数
主函数
补充一个冒泡排序
冒泡排序指:在排序时,每次比较数组中相邻的两个数组元素的值,将较小的数排在较大的数的前面。一般需要双层循环,每一次完整循环都会将数组中最小(大)的数移动到最前面:
#includeint main() { int a[5] = { 9,8,10,21,2 }; int temp = 0; for (int i = 0; i < 5; i++) { for (int j = 4; j > i; j--) { if (a[j] >= a[j - 1])//从大到小 { temp = a[j]; a[j] = a[j - 1]; a[j - 1] = temp; } } } for (int i = 0; i < 5; i++) { printf("%dn", a[i]); } return 0; }
当然我们还可以用指针实现冒泡排序:
#includevoid order(int* p, int n) { int temp = 0; for (int i = 0; i < n; i++) { for (int j = n - 1; j >= i; j--) { if (*(p + j) < *(p + j - 1))//从小到大 { temp = *(p + j); *(p + j) = *(p + j - 1); *(p + j - 1) = temp; } } } return; } int main() { int a[50] = { 0 }, n = 0; printf("请输入数组元素个数:"); scanf_s("%d", &n); printf("请输入各个元素:"); for (int i = 0; i < n; i++) { scanf_s("%d", a + i); } order(a, n); for (int i = 0; i < n; i++) { printf("%dn", *(a + i)); } return 0; }
有点点麻烦....
返回指针值的函数
指针变量也可以指向一个函数。函数在编译是时被分配一个入口地址,该入口地址就是函数的指针。我们可以用一个指针变量指向函数,然后通过该指针变量调用此函数。
一个函数可以带回一个整型值、字符值等,也可以带回指针型的数据,就是地址。
定义一个指针函数:
类型名 *函数名(参数列表);
int *fun(int a, int b);
这时候返回值就是一个指针了。
指针数组做main函数参数
todo。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)