今天讲了指针。*******呵呵
指针变量所占的内存大小取决于操作系统位数。(32位系统指针占4字节)
不同类型的指针区别主要决定指针自增运算,指针
printf("%zu",sizeof(int));
输出指针的时候
int a;
int *pi=&a;
printf("%p",pi);
///////////////////////////////////////////
1、输入10个整数,将其中最小的数与第一个数对换,把最大的数和最后一个数对换,写3个函数:(1)输入10个数;(2)进行处理;(3)输出10个数。
//在对数字进行操作的时候,我们可以传进去一个指针,指向这十个数。所以在对输入的十个数进行操作的时候,不是进行的数值的copy,而是用指针指向的同一段内存空间。所以说,是对原数组的操作。
//1、输入10个整数,将其中最小的数与第一个数对换,把最大的数和最后一个数对换,写3个函数:(1)输入10个数;(2)进行处理;(3)输出10个数。 int num; int main () { //void inputdata(); //inputdata(); void input(int *); void sorting(int *); int b[10]; input(b); sorting(b); return 0; } //void inputdata(int *arr) //{ // // for (int i=0; i<10; i++) { // printf("请输入十个数:arr[%d]",i); // scanf("%d",&arr[i]); // } // for (int i=0; i<10; i++) // { // printf("%d ",arr[i]); // } //} void input(int *a) { int i=0; for(i=0;i<10;i++) { printf("请输入arr[%d]个数: ",i); scanf("%d",&a[i]); } printf("原序列为: "); for(i=0;i<10;i++) printf("%d ", a[i]); printf(" "); } void sorting(int *a) { int i,max,min,maxnum,minnum,temp1,temp2; max = min = a[0]; maxnum = minnum = 0; for(i=1;i<10;i++) { if(a[i] > max) { max = a[i];maxnum = i; } if(a[i] < min) { min = a[i];minnum = i; } } printf("最大的数为%d,是第%d个数 ",max,maxnum+1); printf("最小的数为%d,是第%d个数 ",min,minnum+1); temp2=a[9],a[9]=max;a[maxnum]=temp2; temp1=a[0],a[0]=min,a[minnum]=temp1; printf("调整后数组序列为: "); for(i=0;i<10;i++) printf("%d ", a[i]); }
2、在主函数中输入10个等长的字符串。用另一个函数对它们排序,然后在主函数输出10个已经排好的字符串。
//在主函数中输入10个等长的字符串。用另一个函数对它们排序,然后在主函数输出10个已经排好的字符串。 int main () { void qsorting1(char name[4][4],int); char name[4][4]={"abc","xyz","mnq","def"}; //name[0]存储的是“abc”字符串的首地址。 qsorting1(name, 4); for (int i=0; i<4; i++) { for (int j=0; j<3; j++) { printf("%c",name[i][j]); } printf(" "); } return 0; } void qsorting1(char name[4][4],int LENGTH) { // char *pc1; // for (int i=0; i<len; i++) { // pc=name[i]; // //pc1=name[i+1]; // for (int j=len-1; j>i; j--) { // if ((strcmp(&pc[j-1], &pc[j]))>0) { // *temp =pc[j-1]; // pc[j-1]=pc[j]; // pc[j]=*temp; // } // } // } char temp[34]; for (int i = 0; i < LENGTH; i++) { for (int j = LENGTH - 1; j > i; j--) { if (strcmp(name[j],name[j-1])<0 ) { strcpy(temp, name[j]); strcpy(name[j], name[j-1]); strcpy(name[j-1],temp); } } } }
面试题:
有一字符串,包含数字与字母,编程去除数字。
1、要求在原字符串中操作
2、使用指针处理。
方法一:
void deleteNumber(char *p){ int count = 0; do { if ( *p >='0' && *p <= '9') { count++; }else{ *(p-count) = *p; } p++; } while (*(p-1)); //刚好到‘ ’的位置。 }
方法2:
void delnum(char * a) { int count=0; for(int i=0;i<strlen(a);i++) { while(a[i]>='0'&&a[i]<='9') { i ++; count++; } strcpy(a+i-count,a+i); count=0; } }
方法3:
//有一字符串,包含数字与字母,编程去除数字。 //1、要求在原字符串中操作 //2、使用指针处理。 char underdostrs[]={"ab123c4defghijklmnopqrs567tuvwxyz"}; char *pi; int count=0; unsigned long len=strlen(underdostrs); pi=underdostrs; char str_num_arr[10]={'1','2','3','4','5','6','7','8','9','0'}; for (int i=0; *pi!=' '; i++) { for (int j=0;j<10; j++) { if (*pi==str_num_arr[j]) { *pi++; count++; } } underdostrs[i]=*pi; *pi++; } for (int i=0; i<len-count; i++) { printf("%c",underdostrs[i]); } printf(" "); return 0;