C-----------------LessionPointer
来源:互联网 发布:人工智能基础教程 pdf 编辑:程序博客网 时间:2024/06/03 05:55
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
/*
//访问数据的方式,1.直接访问,直接访问变量.2.间接访问,找到变量的地址.
int a = 10;
printf("%d\n", a);
//指针变量,专门用来存储地址的变量.
//int * :指针变量的类型; p :变量名; NULL : 初值(指向一个无效区域).
//变量定义时 * 的作用:告诉编译器后边的变量是一个指针变量,用来存储地址.
//int :1.当通过指针变量取数据时一次性读取几个字节的数据.2.当指针变量+1或者-1时,一次性改变几个字节.
//指针变量的空间大小和操作系统位数有关,32位4个字节,64位8个字节.char *,float *,short *,int *.
int *p = NULL; //NULL == 0
p = &a; //p存储a的地址
printf("%d\n", *p);
*p = 20; //修改p指向的内存空间的数据 此时*的作用:根据指针变量p找到指向的内存空间,如果*p在等号的左边,中是赋值操作,否则都是取值操作.
printf("%d\n", a);
*/
/*
int a = 10, b = 5;
int *p1 = &a; //指向a
int *p2 = &b; //指向b
//通过指针变量交换a和b里面的值
int temp = *p1;
*p1 = *p2;
*p2 = temp;
printf("a = %d, b = %d\n", *p1, *p2);
//通过p1访问b,通过p2访问a;
printf("a = %d, b = %d\n", *(p2 + 1), *(p1 - 1));
*/
/*
int a = 10, b = 20, c = 30;
int *p = &b;
printf("b = %d\n", *p);
printf("a = %d\n", *(p + 1));
printf("c = %d\n", *(p - 1));
//访问到a
printf("a = %d\n", a);
printf("a = %d\n", *(&a));
printf("a = %d\n", *(p + 1));
printf("a = %d\n", *(&b + 1));
printf("a = %d\n", *(&c + 2));
p = &c; //指针变量重新赋值的过程就叫做指针重指向,将p指向c.
printf("%d", *p);
*/
/*
int a[5] = {1, 2, 3, 4, 5};
int *p = a; //存储数组的首地址
printf("%d\n", *p);
printf("%d\n", *(p + 2));
printf("%d\n", 3[a]); // *(3 + a) a[3] 输出同等于*(a + 3)
//a[a] --- *(3 + a) a[3] --- *(a + 3) 其中a为数组首地址
//输出数组元素
for (int i = 0; i < 5; i++) {
printf("%d ", *(p + i));
}
printf("\n");
for (int i = 4; i >= 0; i--) {
printf("%d ", *(p + i));
}
printf("\n");
int b[10] = {0};
//通过指针操作
int *q = b;
//赋值[20, 40];
for (int i = 0; i < 10; i++) {
*(q + i) = arc4random() % (40 - 20 + 1) + 20;
printf("%d ", *(q + i));
}
printf("\n");
//升序排序
for (int i = 0; i < 10 - 1; i++) {
for (int j = 0; j < 10 - 1 - i; j++) {
if (*(q + j) > *(q + j + 1)) {
int temp = *(q + j);
*(q + j) = *(q + j + 1);
*(q + j + 1) = temp;
}
}
}
//输出
for (int i = 0; i < 10; i++) {
printf("%d ", *(q + i));
}
printf("\n");
*/
/*
int a[10] = {0};
int *p = a;
//1.赋值[10, 50].
for (int i = 0; i < 10; i++) {
*(p + i) = arc4random() % (50 - 10 + 1) + 10;
printf("%d ", *(p + i));
}
printf("\n");
//2.求所有元素的最大值
// int max = *p;
// for (int i = 0; i < 10; i++) {
// if (max < *(p + i)) {
// max = *(p + i);
// }
// }
// printf("max = %d\n", max);
//3.求所有元素的最小值
int min = *p;
for (int i = 0; i < 10; i++) {
if (min > *(p + i)) {
min = *(p + i);
}
}
printf("min = %d\n",min);
//4.求所有元素的第二大值
// int max = 0;
// int secondMax = 0;
// for (int i = 0; i < 10; i++) {
// if (*(p + i) > max) {
// secondMax = max;
// max = *(p + i);
// } else if(secondMax < *(p + i) && *(p + i) != max){
// secondMax = *(p + i);
// }
// }
// printf("max = %d\nsecondMax = %d\n", max, secondMax);
//5.求所有元素的和
int sum = 0;
for (int i = 0; i < 10; i++) {
sum += *(p + i);
}
printf("sum = %d\n", sum);
//----------------
// int max = 0;
// int secondMax = 0;
// for (int i = 0; i < 10; i++) {
// if (max < *(p + i)) {
// secondMax = max;
// max = *(p + i);
// } else if (secondMax < *(p + i) && *(p + i) != max){
// secondMax = *(p + i);
// }
// }
// printf("max = %d\nsecondMax = %d\n", max, secondMax);
//-----------------
int max = 0;
int secondMax = 0;
for (int i = 0; i < 10; i++) {
if (max < *(p + i)) {
secondMax = max;
max = *(p + i);
} else if (secondMax < *(p + i) && *(p + i) != max){
secondMax = *(p + i);
}
}
printf("max = %d\nsecondMax = %d\n", max, secondMax);
*/
/*
int a[5] = {65536, 2, 3, 4, 5};
// int 1.当操作内存空间时,一次性操作几个字节的空间大小. 2.当自增时,加一个单位,所增加的字节大小.
int *p = a; //a本身就是地址,无需再取地址.
printf("%d", *p);
*/
/**
* 比较 数组 和 指针变量
1.空间大小.
数组所占存储空间 = 数组元素个数 * 每个元素所占存储空间大小
指针变量和操作系统位数有关,32位操作系统是4个字节;64位操作系统是8个字节.
2.可变性.
数组名代表数组的首地址,是一个常量地址,不可改变.
指针变量本质上就是一个变量,可以重新赋值,指针赋值的过程叫做指针重指向.
*/
/*
//指针变量和字符数组(字符串)之间的关系.
char str[] = "ac is a big company, yao shang shi";
char *p = str; //指向字符串首地址.
printf("%c\n", *(p + 6));
//给定一个开始地址,一个字符一个字符的输出,直到遇到\0结束.
*(p + 22) = '\0';
printf("%s\n", p + 24);
//1.字符串长度
unsigned long length = strlen(p);
printf("%lu\n", length);
//2.字符串拷贝
//strcpy 返回目的字符串的地址.
strcpy(p + 5, "Frank");
printf("%s\n", p);
//3.字符串比较
printf("%d\n", strcmp(p + 1, "bb"));
*/
/*
//求字符串中空格的个数,用指针操作
char str[] = "I love iOS";
char *p = str;
int count = 0; //存储空格个数
int i = 0;
while (*(p + i) != '\0') {
if (*(p + i) == ' ') {
count++;
}
i++;
}
printf("%d\n", count);
*/
//p1 指向数组str,数组str在栈区,空间内容可以更改
/*
char str[] = "Frank is handsome";
char *p1 = str;
strcpy(p1, "Duck");
//p2 指向的是常量字符串的首地址,处在常量区,常量区的内容不可更改
char *p2 = "Frank is handsome";
strcpy(p2, "Duck");
*/
/*
//1.指针要有明确指向.
//2.要指向一个可控的区域.
char *p = 0x7ffffff100;
strcpy(p, "aaaa");
*/
/*
//指针数组
char *str[3] = {"Frank", "Duck", "Kris"};
printf("%s", str[2]);
//升序排序
for (int i = 0; i < 3 - 1; i++) {
for (int j = 0; j < 3 - 1 - i; j++) {
if (strcmp(str[j], str[j + 1]) > 0) {
//交换,两个元素的值
char *temp = str[j];
str[j] = str[j + 1];
str[j + 1] = temp;
}
}
}
for (int i = 0; i < 3; i++) {
printf("%s\n",str[i]);
}
*/
return 0;
}
******************************************************************************************************************************************************************************************************
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
// 1、输入10个整数,将其中最小的数与第一个数对换,把最大的数和最后一个数对换,指针实现
/*
int a[10] = {0};
int *p = a;
int max = 0;
int min = 1000000000;
printf("输入十个数:\n");
for (int i = 0; i < 10; i++) {
scanf("%d", p + i);
}
for (int i = 0; i < 10; i++) {
if (max < *(p + i)) {
max = *(p + i);
}
}
for (int i = 0; i < 10; i++) {
if (max == *(p + i)) {
int temp = *(p + i);
*(p + i) = *(p + 9);
*(p + 9) = temp;
}
}
for (int i = 0; i < 10; i++) {
if (min > *(p + i)) {
min = *(p + i);
}
}
for (int i = 0; i < 10; i++) {
if (min == *(p + i)) {
int temp = *(p + i);
*(p + i) = *p;
*p = temp;
}
}
for (int i = 0; i < 10; i++) {
printf("%d ", *(p + i));
}
*/
// 有一字符串,包含数字与字母,编程去除数字。
// 1、要求在原字符串中操作
// 2、使用指针处理。
char a[] ="aghk6545kj4kfsl4415kjhhf";
char *p =a;
int i = 0;
while (*(p + i) != '\0') {
int j = 0;
while (*(p + i) < 57 && *(p + i) > 48) {
if (*(p + i) > 48 && *(p + i) < 57) {
strcpy(p + i, p + i + 1);
}
j++;
}
i++;
}
printf("%s\n", p);
return 0;
}
- C-----------------LessionPointer
- c
- c
- c
- c
- C
- c
- c
- c
- C+
- c
- C
- c
- c
- c
- C
- C
- c
- 数据结构课程设计-哈夫曼编码译码
- java中线程队列BlockingQueue的用法
- hdu1009 FatMouse' Trade
- 由二叉树的前序和中序还原二叉树
- oracle查询重复记录
- C-----------------LessionPointer
- UIWebView获得contentsize
- C++ 6 指针
- 301重定向与302重定向之间的区别
- Aix db2 通过user a using b连接时报SQL30082N Security processing failed with reason "42"
- 《数据结构》第六章 图 知识结构导图——信管1133-09
- hibernate annotation处理映射关系
- C-----------------LessonPointerHigher
- 低功耗蓝牙4.0BLE编程-nrf51822开发(3)